[USACO08JAN]牛大赛Cow Contest

OJ题号:洛谷2419

思路:

Floyd求有向图的传递闭包,只要该点与其他所有点相连即可确定名次。

 1 #include<cstdio>
 2 #include<cstring>
 3 int main() {
 4     int n,m;
 5     scanf("%d%d",&n,&m);
 6     bool s[n+1][n+1];
 7     memset(s,0,sizeof s);
 8     while(m--) {
 9         int a,b;
10         scanf("%d%d",&a,&b);
11         s[a][b]=true;
12     }
13     for(int k=1;k<=n;k++) {
14         for(int i=1;i<=n;i++) {
15             for(int j=1;j<=n;j++) {
16                 s[i][j]|=s[i][k]&&s[k][j];
17             }
18         }
19     }
20     int ans=0;
21     for(int i=1;i<=n;i++) {
22         for(int j=1;j<=n;j++) {
23             if(i==j) continue;
24             if(!s[i][j]&&!s[j][i]) goto Next;
25         }
26         ans++;
27         Next:;
28     }
29     printf("%d\n",ans);
30     return 0;
31 }

 

posted @ 2017-05-23 12:50  skylee03  阅读(136)  评论(0编辑  收藏  举报