链接:

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, 0, sizeof(d));
    for(int i=1; i<=n; i++)
    for(int j=1; j<=i; j++)
    {
        G[i][j]=G[j][i]=INF;
    }
}

void Floyd()
{
    for(int k=1; k<=n; k++)
    for(int i=1; i<=n; i++)
    for(int j=1; j<=n; j++)
    {
        if(k!=i && k!=j && i!=j && !G[i][k] && !G[k][j])
        {
            if(!f[i][j])
            {
                G[i][j]=0;
                f[i][j]=1;
                d[i]++; d[j]++;
            }
        }
    }
}

int main()
{
     while(scanf("%d%d", &n, &m)!=EOF)
     {
         int i, a, b;

         IN();

         for(i=0; i<m; i++)
         {
             scanf("%d%d", &a, &b);
             G[a][b]=0;
             f[a][b]=1;
             d[a]++;d[b]++;
         }

         Floyd();

         int sum=0;

         for(i=1; i<=n; i++)
         {
             if(d[i]==n-1)
                sum++;
         }

         printf("%d\n", sum);
     }
    return 0;
}

 

posted on 2015-07-21 10:42  栀蓝  阅读(138)  评论(0编辑  收藏  举报

levels of contents