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 }

 

posted @ 2013-01-07 19:57  wonderlily  阅读(159)  评论(0编辑  收藏  举报