1. 程式人生 > 其它 >poj 3256(多重dfs)

poj 3256(多重dfs)

#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; }