POJ3660-Cow Contest
1 #include <stdio.h> 2 #include <string.h> 3 #define MAXN 101 4 bool map[MAXN][MAXN]; 5 int n,m; 6 7 void floyd() 8 { 9 for(int k=1; k<=n; k++) 10 for(int i=1; i<=n; i++) 11 for(int j=1; j<=n; j++) 12 map[i][j]=(map[i][j]||(map[i][k]&&map[k][j])); 13 } 14 15 int main() 16 { 17 while(scanf("%d %d", &n, &m)==2) 18 { 19 memset(map,false,sizeof(map)); 20 for(int i=1;i<=n;i++) 21 map[i][i]=true; 22 for(int i=1,a,b;i<=m;++i) 23 { 24 scanf("%d %d", &a, &b); 25 map[a][b]=true; 26 } 27 floyd(); 28 int cnt = 0; 29 bool f; 30 for(int i=1; i<=n; i++) 31 { 32 f=true; 33 for(int j=1;j<=n;j++) 34 if(!(map[i][j]||map[j][i])) 35 { 36 f=false; 37 break; 38 } 39 if(f) ++cnt; 40 } 41 printf("%d\n",cnt); 42 } 43 return 0; 44 }