洛谷p2853Cow picnic S题解

题目描述

The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ 100) cows is grazing in one of N (1 ≤ N ≤ 1,000) pastures, conveniently numbered 1...N. The pastures are connected by M (1 ≤ M ≤ 10,000) one-way paths (no path connects a pasture to itself).

The cows want to gather in the same pasture for their picnic, but (because of the one-way paths) some cows may only be able to get to some pastures. Help the cows out by figuring out how many pastures are reachable by all cows, and hence are possible picnic locations.

K(1≤K≤100) 只奶牛分散在 N(1≤N≤1000) 个牧场.现在她们要集中起来进餐。牧场之间有 M(1≤M≤10000) 条有向路连接,而且不存在起点和终点相同的有向路.她们进餐的地点必须是所有奶牛都可到达的地方。那么,有多少这样的牧场可供进食呢?

输入格式

Line 1: Three space-separated integers, respectively: K, N, and M

Lines 2..K+1: Line i+1 contains a single integer (1..N) which is the number of the pasture in which cow i is grazing.

Lines K+2..M+K+1: Each line contains two space-separated integers, respectively A and B (both 1..N and A != B), representing a one-way path from pasture A to pasture B.

输出格式

Line 1: The single integer that is the number of pastures that are reachable by all cows via the one-way paths.

输入输出样例

输入 #1复制

复制代码
2 4 4
2
3
1 2
1 4
2 3
3 4

输出 #1复制

复制代码
2

说明/提示

The cows can meet in pastures 3 or 4.

思路:

dfs+循环

通过暴力枚举每一个牧场,再看一看是不是所有牛都可以来到这个牧场。

存图可以用vector动态数组。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
long long k,n,m,ans,t[1010],a[1010],vis[1010],x,y;
vector<int>b[1010];
void dfs(int x){
     vis[x]=1;  
     t[x]++;
     for(int i=0;i<b[x].size();i++)
         if(!vis[b[x][i]])
             dfs(b[x][i]);
}
int main(){
    cin>>k>>n>>m;
    for(int i=1;i<=k;i++)cin>>a[i];
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        b[x].push_back(y);
    }
    for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++) vis[j]=0;  
        dfs(a[i]);
    }
    for(int i=1;i<=n;i++) if(t[i]==k) ans++;
    cout<<ans;
}

t数组是存储一个牧场它被每个奶牛经历的次数,只要次数=奶牛总数,就ans数量+1

相关推荐
罗西的思考38 分钟前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
小七在进步41 分钟前
string的使用(1)
c++·visual studio
白杨尚青2 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
好悬给我拽开线4 小时前
ZILOT 论文解析
算法
kloc4 小时前
聊天室项目入口网关子服务的实现
linux·c++
饮水桶_T5 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘566 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi6 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者7 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet8 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法