求有多少个点,是所有cow都能到达的。 给每个点一个度,初始为0,然后依次以每头奶牛为起点进行DFS遍历,能够到达的点的度加1。 #include <iostream> #include <algorithm> using namespace std; int times[1005],K,N,M,pos[105],p[1005]; bool visited[1005]; struct node { int s,t; }nodes[10005]; bool operator<(const node& a,const node& b) { return a.s<b.s; } void DFS(int i) { visited[i]=true; times[i]++; for(int j=p[i];j<p[i+1];j++) { if(!visited[nodes[j].t]) DFS(nodes[j].t); } } int main() { scanf("%d%d%d",&K,&N,&M); for(int i=0;i<K;i++) { scanf("%d",&pos[i]); } for(int i=0;i<M;i++) { scanf("%d%d",&nodes[i].s,&nodes[i].t); } sort(nodes,nodes+M); int index=0; for(int i=1;i<=N;i++) { while(nodes[index].s==i-1) index++; p[i]=index; } p[N+1]=M; memset(times,0,sizeof(visited)); for(int i=0;i<K;i++) { memset(visited,0,sizeof(visited)); DFS(pos[i]); } int ans=0; for(int i=1;i<=N;i++) { if(times[i]==K) ans++; } printf("%d/n",ans); return 0; }