P2853 [USACO06DEC]牛的野餐Cow Picnic
dfs
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,k,p[10000],can[10000]; 4 int w[1000+15][1000+15]; 5 bool vis[10000]; 6 7 void dfs(int pre) 8 { 9 for(int j=1;j<=n;j++) 10 { 11 if(w[pre][j]&&!vis[j]) 12 { 13 vis[j]=1; can[j]++; 14 dfs(j); 15 } 16 } 17 } 18 19 int main() 20 { 21 scanf("%d%d%d",&k,&n,&m); 22 for(int i=1;i<=k;i++) scanf("%d",&p[i]); 23 for(int i=1;i<=m;i++) 24 { 25 int x,y; 26 scanf("%d%d",&x,&y); 27 w[x][y]=1; 28 } 29 for(int i=1;i<=n;i++) w[i][i]=1; 30 for(int i=1;i<=k;i++) 31 { 32 memset(vis,0,sizeof(vis)); 33 dfs(p[i]); 34 } 35 36 int ans=0; 37 for(int i=1;i<=n;i++) if(can[i]==k) ans++; 38 printf("%d\n",ans); 39 return 0; 40 }
时间: 2024-12-20 09:48:14