POJ 3660 Cow Contest

题目蛮有意思的,有n头牛进行比赛,他们之间的比赛结果可以传递,比如a战胜了b,b战胜了c,

那么也可以推出a战胜了c,问有多少头牛的名次可以确定。名次确定就是它战胜的x头牛+战胜它

的y头牛=n - 1,出现这种情况+1即可。今天的开胃菜。。。

/*Accepted    228K    32MS    C++    1056B    2012-09-03 09:46:55*/

#include<stdio.h>

#include<string.h>

#include<stdlib.h>



const int MAXN = 1 << 7;

int res[MAXN][MAXN];

int n, m;

void ReadGraph()

{

    int a, b;

    memset(res, 0, sizeof res);

    while(m --)

    {

        scanf("%d%d", &a, &b);

        res[a][b] = 1;

    }

}



void floyd()

{

    int i, j, k;

    for(k = 1; k <= n; k ++)

    {

        for(i = 1; i <= n; i ++)

        {

            for(j = 1; j <= n; j ++)

            {

                if(res[i][k] && res[k][j])

                    res[i][j] = 1;

            }

        }

    }

}



int cal()

{

    int cnt, ans = 0, i, j;

    for(i = 1; i <= n; i ++)

    {

        cnt = 0;

        for(j = 1; j <= n; j ++)

        {

            if(i == j) continue;

            if(res[i][j] || res[j][i])

                cnt ++;

        }

        if(cnt == n - 1)

            ans ++;

    }

    return ans;

}



int main()

{

    while(scanf("%d%d", &n, &m) == 2)

    {

        ReadGraph();

        floyd();

        printf("%d\n", cal());

    }

    return 0;

}

 

 

你可能感兴趣的:(test)