POJ 3660 Cow Contest

本文介绍了一种通过比赛胜负关系确定牛的排名的算法。在比赛中,若一头牛直接或间接战胜所有其他牛,则其排名确定。利用Floyd算法处理比赛结果的传递性,最终计算并输出排名确定的牛的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目蛮有意思的,有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;
}

 

 

转载于:https://www.cnblogs.com/Yu2012/archive/2012/09/03/2668325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值