poj3660Cow Contest(floyd)

题目链接:http://poj.org/problem?id=3660

floyd。

 1 #include<cstdio>
 2 #include<cstring>
 3 int n,m;
 4 int pic[110][110];
 5 void floyd()
 6 {
 7     for(int k=1;k<=n;k++)
 8         for(int i=1;i<=n;i++)
 9         for(int j=1;j<=n;j++)
10         pic[i][j]=pic[i][j]|pic[i][k]&pic[k][j];
11 }
12 
13 int main()
14 {
15     int u,v;
16     while(scanf("%d%d",&n,&m)!=EOF)
17     {
18        for(int i=1;i<=n;i++)
19         for(int j=1;j<=n;j++)
20         pic[i][j]=(i==j?1:0);
21         for(int i=0;i<m;i++)
22         {
23             scanf("%d%d",&u,&v);
24             pic[u][v]=1;
25         }
26         floyd();
27        int ans=0;
28        for(int i=1;i<=n;i++) //枚举牛i
29        {
30            int cnt=0;  
31            for(int j=1;j<=n;j++)  
32            {
33                if(pic[i][j]) cnt++;  //比i小的
34                if(pic[j][i]) cnt++;  //比i大的
35            }
36            if(cnt==n+1) ans++;  //自己被重复算
37        }
38        printf("%d\n",ans);
39     }
40     return 0;
41 }

 

posted @ 2017-03-25 09:19  yijiull  阅读(94)  评论(0编辑  收藏  举报