水题,dfs搜索。
// // main.cpp // Richard // // Created by 邵金杰 on 16/8/14. // Copyright © 2016年 邵金杰. All rights reserved. // #include<iostream> #include<cstdio> #include<vector> #include<cstring> using namespace std; int arrivetime[1010]; int cow[105]; int vis[1010]; vector<int> edges[1010]; int K,N,M; void dfs(int s) { for(int i=0;i<edges[s].size();i++) { int e=edges[s][i]; if(!vis[e]) { vis[e]=1; arrivetime[e]++; dfs(e); } } } int main() { while(scanf("%d%d%d",&K,&N,&M)!=EOF) { memset(arrivetime,0,sizeof(arrivetime)); for(int i=0;i<=N;i++) edges[i].clear(); for(int i=0;i<K;i++) { scanf("%d",&cow[i]); } int s,e; for(int i=0;i<M;i++) { scanf("%d%d",&s,&e); edges[s].push_back(e); } for(int i=0;i<K;i++) { memset(vis,0,sizeof(vis)); int s=cow[i]; arrivetime[s]++; vis[s]=1; dfs(s); } int cnt=0; for(int i=1;i<=N;i++) { if(arrivetime[i]==K) cnt++; } printf("%d\n",cnt); } return 0; }