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 }