题目链接:http://poj.org/problem?id=3660
给一个M,N,N代表有几头牛,M代表有几组比赛,最后求有几头牛可以确定名次。
--------------------------------------------------------------------
#include <iostream>
#include <math.h>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define MAXN 520
#define MAXM 6000
#define INF 0Xffffff
using namespace std ;
int d[MAXN][MAXN];
int T, N, M, l, u, w;
double dis[MAXN];
int ans;
double V;
void floyd()
{
for(int k=1; k<=N; k++)
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
if(d[i][k]&&d[k][j])
d[i][j] = 1;
}
int main()
{
int a,b;
while(scanf("%d%d",&N,&M)!=EOF)
{
memset(d,0,sizeof(d));
for(int i=0; i<M; i++)
{
scanf("%d%d",&a,&b);
d[a][b] = 1;
}
floyd();
int ans=0;
for(int i=1;i<=N;i++)
{
int sum = 0;
for(int j=1;j<=N;j++)
{
if(d[i][j]||d[j][i]) sum++;
}
if(sum == N-1)
ans++;
}
printf("%d
",ans);
}
return 0;
}