首页 > 代码库 > dfs5
dfs5
搜索练习一
K(1≤K≤100)只奶牛分散在N(1≤N≤1000)个牧场.现在她们要集中起来进餐.牧场之间有M(1≤M≤10000)条有向路连接,而且不存在起点和终点相同的有向路.她们进餐的地点必须是所有奶牛都可到达的地方.那么,有多少这样的牧场呢?
第1行输入K,N,M.接下来K行,每行一个整数表示一只奶牛所在的牧场编号.接下来M行,每行两个整数,表示一条有向路的起点和终点。
所有奶牛都可到达的牧场个数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
using namespace std;
vector<int> e[10005];
int k,n,m,a[10005],vis[10005],f[10005],ans=0;
void dfs(int s)
{
f[s]++;
vis[s]=true;
if(f[s]==k)
ans++;
for(int i=0;i<e[s].size();i++)
if(!vis[e[s][i]])
dfs(e[s][i]);
}
int main()
{
scanf("%d%d%d",&k,&n,&m);
for(int i=1;i<=k;i++)
scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
e[x].push_back(y);
}
for(int i=1;i<=k;i++)
{
memset(vis,0,sizeof(vis));
dfs(a[i]);
}
printf("%d\n",ans);
return 0;
}
dfs5