P2853 [USACO06DEC] Cow Picnic S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
这题就是dfs一下记一下每头牛能到的地方,如果所有牛都能到的地方ans++;
题意很简单
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 1010;
struct edge
{
int a, b;
};
int k, n, m;
int cow[N], ans;
vector<edge> e[N];
int p[N];
bool st[N];
void dfs(int u)
{
st[u] = true;
p[u] ++;
for(int i = 0; i < e[u].size(); i ++ )
{
int j = e[u][i].b;
if(!st[j])
{
dfs(j);
}
}
}
int main()
{
cin >> k >> n >> m;
for(int i = 0; i < k; i ++ )
{
cin >> cow[i];
}
for(int i = 0; i < m; i ++ )
{
int a, b;
cin >> a >> b;
e[a].push_back((edge){a, b});
}
// dfs(1);
for(int i = 0; i < k; i ++ )
{
memset(st, false, sizeof st);
if(cow[i]) dfs(cow[i]);
}
for(int i = 1; i <= n; i ++ )
{
if(p[i] == k) ans ++;
}
cout << ans;
return 0;
}