#include<stdio.h>
#include<string.h>
#define maxn 1001
#define maxk 101
int map[maxn][maxn];
int cow_loc[maxk],hold[maxn];
int visited[maxn];
int k,n,m;
void DFS(int x)
{ int j;
visited[x]=1;
hold[x]++;
for(j=1;j<=n;j++){
if(map[x][j]==1&&visited[j]==0)
DFS(j);
}
}
void begin()
{ int i,j;
for(i=1;i<=k;i++){
memset(visited,0,sizeof(visited));
DFS(cow_loc[i]);
}
}
int main()
{ int i,st,loc,count=0;
memset(hold,0,sizeof(hold));
memset(map,0,sizeof(map));
scanf("%d%d%d",&k,&n,&m);
for(i=1;i<=k;i++){
scanf("%d",&cow_loc[i]);
}
for(i=1;i<=m;i++){
scanf("%d%d",&st,&loc);
map[st][loc]=1;
}
begin();
for(i=1;i<=n;i++){
if(hold[i]==k)
count++;
}
printf("%d\n",count);
return 0;
}
联系BFS。。居然写出了一段DFS代码。。。。明天写下这道题的BFS的吧。。比较下算法。。。400MS过,悲哀呢。。。
#include<string.h>
#define maxn 1001
#define maxk 101
int map[maxn][maxn];
int cow_loc[maxk],hold[maxn];
int visited[maxn];
int k,n,m;
void DFS(int x)
{ int j;
visited[x]=1;
hold[x]++;
for(j=1;j<=n;j++){
if(map[x][j]==1&&visited[j]==0)
DFS(j);
}
}
void begin()
{ int i,j;
for(i=1;i<=k;i++){
memset(visited,0,sizeof(visited));
DFS(cow_loc[i]);
}
}
int main()
{ int i,st,loc,count=0;
memset(hold,0,sizeof(hold));
memset(map,0,sizeof(map));
scanf("%d%d%d",&k,&n,&m);
for(i=1;i<=k;i++){
scanf("%d",&cow_loc[i]);
}
for(i=1;i<=m;i++){
scanf("%d%d",&st,&loc);
map[st][loc]=1;
}
begin();
for(i=1;i<=n;i++){
if(hold[i]==k)
count++;
}
printf("%d\n",count);
return 0;
}