POJ 3660 Cow Contest

题意:给出n头牛、m个关系,关系 a b代表a比b的采集能力高、求能确定排名的牛数

思路:如果一头牛于其他n-1头牛都有可比的关系,那么这头牛的排名就是确定的、那么题目就转化成一个求传递闭包的问题了

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 const int qq=105;
 5 int rela[qq][qq]={0};
 6 int main()
 7 {
 8     int n,m;
 9     scanf("%d%d",&n,&m);
10     int a,b;
11     for(int i=0;i<m;++i){
12         scanf("%d%d",&a,&b);
13         rela[b][a]=1;
14     }
15     for(int j,i,k=1;k<=n;++k)    //floyd求传递闭包、 
16         for(i=1;i<=n;++i)
17             for(j=1;j<=n;++j)
18                 if(rela[i][k]&&rela[k][j])
19                     rela[i][j]=1;
20     int ans=0;
21     for(int j,i=1;i<=n;++i){
22         int count=0;
23         for(int j=1;j<=n;++j)
24             if(rela[i][j]||rela[j][i])    //两个点之间排名的顺序一定是确定的,要么前要么后 
25                 ++count;
26         if(count==n-1)        //当一个点与其他n-1个点都存在可达路径时、那么这个点的排名就确定 
27             ++ans;
28     }
29     printf("%d",ans);
30     return 0;
31 }

 

posted @ 2016-05-04 13:43  我不萌、我要高冷  阅读(139)  评论(0编辑  收藏  举报