题意: 就是说有K头牛要聚餐,有N个草地,M条小路,并给出小路的起始地点和终止地点。问小牛们可以聚餐的地方有几个
注意啦!!!那些道路可以形成环的,这样就会形成死循环的
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
bool ways[1010][1010];
int cow[110],visit[1010];
bool cicrl[1010];
int K,N,M;
void scan()
{
memset(ways,false,sizeof(ways));
memset(visit,0,sizeof(visit));
for(int i=1;i<=K;i++)
scanf("%d",&cow[i]);
int tempa,tempb;
for(int i=1;i<=M;i++){
scanf("%d%d",&tempa,&tempb);
ways[tempa][tempb]=true;
}
}
void dfs(int pos)
{
visit[pos]++;
cicrl[pos]=true;
for(int i=1;i<=N;i++)
if(ways[pos][i]&&!cicrl[i])
dfs(i);
}
int main()
{
while(scanf("%d%d%d",&K,&N,&M)!=EOF)
{
scan();
for(int i=1;i<=K;i++){
memset(cicrl,false,sizeof(cicrl));
dfs(cow[i]);
}
int ans=0;
for(int i=0;i<=N;i++){
if(visit[i]==K)
ans++;
}
printf("%d\n",ans);
}
return 0;
}