1 /floyd求传递闭包,裸题,当牛被打败x次,胜利y次,且x+y==n-1时,说明该牛位置确定。注意下面的程序中 2 //map[i][i]恒为false,也就是自己不能打败自己。难度1 3 4 #include<stdio.h> 5 #include<string.h> 6 int n,m; 7 int map[500][500]; 8 void floyd() 9 { 10 int i,j,k; 11 for(k=1;k<=n;k++) 12 { 13 for(i=1;i<=n;i++) 14 for(j=1;j<=n;j++) 15 { 16 if(map[i][k]&&map[k][j])map[i][j]=1; 17 } 18 } 19 } 20 int main() 21 { 22 int i,a,b,j; 23 while(scanf("%d%d",&n,&m)!=EOF) 24 { 25 memset(map,0,sizeof(map)); 26 for(i=1;i<=m;i++) 27 { 28 scanf("%d%d",&a,&b); 29 map[a][b]=1; 30 } 31 floyd(); 32 int ans=0; 33 for(i=1;i<=n;i++) 34 { 35 int sum=0; 36 37 for(j=1;j<=n;j++) 38 { 39 if(map[i][j]||map[j][i])sum++; 40 } 41 if(sum==n-1)ans++; 42 } 43 printf("%d\n",ans); 44 } 45 46 }