poj 3660 Cow Contest(传递闭包 Floyd)
题意:给定n头牛,以及某些牛之间的强弱关系。按强弱排序。求能确定名次的牛的数量
思路:对于某头牛,若比它强和比它弱的牛的数量为 n-1,则他的名次能够确定
#include<stdio.h> #include<limits.h> int a[110][110]; int main() { int n,m,i,j,k,s,sum; while(scanf("%d%d",&n,&m)!=EOF){ for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; while(m--){ scanf("%d%d",&i,&j); a[i][j]=1; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(a[i][k]&&a[k][j]) //若i比k强,k比j强,则i比j强 a[i][j]=1; sum=0; for(i=1;i<=n;i++){ s=0; for(j=1;j<=n;j++){ if(a[i][j]||a[j][i]) s++; } if(s==n-1) sum++; } printf("%d\n",sum); } return 0; }