poj 3256(多重dfs)
阿新 • • 發佈:2021-08-16
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int cow[1005],edge[1005][1005],k,n,m,visit_sum[1005]; bool visit[1005]; void dfs(int cow_i){ int i; visit[cow_i] = 1; for(i=1;i<=n;i++){ if(edge[cow_i][i]==1&&visit[i]==0){ visit[i]= 1; dfs(i); } } } int main(){ int i,j,row,col,sum; scanf("%d%d%d",&k,&n,&m); for(i=1;i<=k;i++){ scanf("%d",&cow[i]); } memset(edge,0,sizeof edge); for(i=1;i<=m;i++){ scanf("%d%d",&row,&col); edge[row][col]= 1; } // for(i=1;i<=n;i++){ // for(j=1;j<=n;j++){ // cout<<edge[i][j]<<" "; // } // cout<<endl; // } memset(visit_sum,0,sizeof visit_sum); for(i=1;i<=k;i++){ memset(visit,0,sizeof visit); dfs(cow[i]); for(j=1;j<=n;j++){ visit_sum[j]+= visit[j]; } } sum = 0; for(i=1;i<=n;i++){ if(visit_sum[i]==k){ sum++; } } printf("%d\n",sum); return 0; }