题目描述
输入
2 4 4
2
3
1 2
1 4
2 3
3 4
输出 #1复制
2
思路:DFS+图的存储(vector构建的邻接表). 从K个奶牛所在的地方进行DFS遍历,最后只有book[i] = k的牧场满足条件.
参考代码
#include<bits/stdc++.h>
using namespace std;
struct edge{
int u,v;
edge(int u1,int v1):u(u1),v(v1){
};
};
int visited[1000+10],k,n,m,arr[105],uu,vv,cnt[1000+10],total;//visited:用于标记是否走过,book:用于计算遍历次数
vector<int> e[1000+5];
void dfs(int x){
visited[x] = 1;
cnt[x]++;
for(int i = 0; i < e[x].size(); i++){
if(!visited[e[x][i]]){
dfs(e[x][i]);
}
}
}
int main()
{
cin>>k>>n>>m;
for(int i = 1; i <= k; i++){
cin>>arr[i];
}
for(int i = 0; i < m; i++){
cin>>uu>>vv;
e[uu].push_back(vv);
}
for(int i = 0; i < k; i++){
memset(visited,0,sizeof(visited));
dfs(arr[i]);
}
for(int i = 1; i <= n; i++){
if(cnt[i]==k){
total++;
}
}
cout<<endl;
cout<<total<<endl;
return 0;
}
类似的题:P5318 【深基18.例3】查找文献