链接:
http://poj.org/problem?id=3660
思路:
1. 1->2->3==1->3
2. 记录每次的比赛人员
3. 每个人只能跟他序号不同的人比赛,因此他最多比了n-1场比赛
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
using namespace std; #define N 110
#define INF 0xfffffff int n, m;
int G[N][N], f[N][N], d[N]; void IN()
{
memset(f, false, sizeof(f));
memset(d, , sizeof(d));
for(int i=; i<=n; i++)
for(int j=; j<=i; j++)
{
G[i][j]=G[j][i]=INF;
}
} void Floyd()
{
for(int k=; k<=n; k++)
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
{
if(k!=i && k!=j && i!=j && !G[i][k] && !G[k][j])
{
if(!f[i][j])
{
G[i][j]=;
f[i][j]=;
d[i]++; d[j]++;
}
}
}
} int main()
{
while(scanf("%d%d", &n, &m)!=EOF)
{
int i, a, b; IN(); for(i=; i<m; i++)
{
scanf("%d%d", &a, &b);
G[a][b]=;
f[a][b]=;
d[a]++;d[b]++;
} Floyd(); int sum=; for(i=; i<=n; i++)
{
if(d[i]==n-)
sum++;
} printf("%d\n", sum);
}
return ;
}