http://poj.org/problem?id=3660
每个牛都有等级 先给出 几组牛之间的关系 问能确定等级的牛的数量
当一头牛和 n-1 头牛的关系确定以后 它的关系也就确定了
#include <stdio.h>
int maxinf=9999999;
int N,M;
int map[110][110];
int count=0;
int count2=0;
void floyd(){
for (int k=1;k<=N;k++){
for (int i=1;i<=N;i++){
for (int j=1;j<=N;j++){
if (map[i][k]==map[k][j]&&(map[k][j]==1||map[k][j]==-1))//确定间接关系 如 :a打败b b打败c 那么 a就可以打败c
{
map[i][j]=map[k][j];
}
}
}
}
for (int i=1;i<=N;i++){
count=0;
for (int j=1;j<=N;j++){
if (map[i][j]==1||map[i][j]==-1){
count++;
}
}
if (count==N-1)//与n-1头牛关系确定 它的等级就确定了
{
count2++;
}
}
printf ("%d\n",count2);
}
int main (){
int n,m,t;
scanf ("%d%d",&N,&M);
for (int i=1;i<=N;i++){
for (int j=1;j<=N;j++){
map[i][j]=maxinf;
}
}
while (M--){
scanf ("%d%d",&n,&m);
map[n][m]=1;
map[m][n]=-1;
}
floyd();
return 0;
}