HLG 1018 Cow Contest【floyd 传递闭包】

本文介绍了一种通过一系列比赛结果来确定参赛奶牛编程技能等级的算法。该算法利用图论中的传递闭包原理,实现了对奶牛技能等级的有效排序,并提供了一个具体的C语言实现示例。

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

Description

N(1 ≤N≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the competitors.

The contest is conducted in several head-to-head rounds, each between two cows. If cowAhas a greater skill level than cowB(1 ≤AN; 1 ≤BN;AB), then cowAwill always beat cowB.

Farmer John is trying to rank the cows by skill level. Given a list the results ofM(1 ≤M≤ 4,500) two-cow rounds, determine the number of cows whose ranks can be precisely determined from the results. It is guaranteed that the results of the rounds will not be contradictory.

Input

For each test case:

* Line 1: Two space-separated integers:NandM
* Lines 2..M+1: Each line contains two space-separated integers that describe the competitors and results (the first integer,A, is the winner) of a single round of competition:AandB

Process to the end of file.

Output

For each test case:

* Line 1: A single integer representing the number of cows whose ranks can be determined

Sample Input
5 5
4 3
4 2
3 2
1 2
2 5
Sample Output
2
code:
View Code
#include<stdio.h>
#include<string.h>
const intmaxnum=102;
intmain()
{
inti,p,q,j;
intd[maxnum][maxnum];
intn,m,sum,k,tot;
while(scanf("%d%d",&n,&m)!=EOF)
{
sum=0;
memset(d,0,sizeof(d));
for(i=1;i<=m;i++)
{
scanf("%d%d",&p,&q);
d[p][q]=1;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
d[i][j]=d[i][j]||(d[i][k]&&d[k][j]); //传递闭包
for(i=1;i<=n;i++)
{
tot=0;
for(j=1;j<=n;j++)
if(d[i][j]||d[j][i])
tot++;
if(tot==n-1)
sum++;
}
printf("%d\n",sum);
}
return0;
}

转载于:https://www.cnblogs.com/dream-wind/archive/2012/03/15/2399508.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值