1.Cow Contest-Floyd

题目:

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 cow A has a greater skill level than cow B (1 ≤ AN; 1 ≤ BN; AB), then cow A will always beat cow B.

Farmer John is trying to rank the cows by skill level. Given a list the results of M (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.


输入:

<p>* Line 1: Two space-separated integers: <i>N</i> and <i>M</i><br>* Lines 2..<i>M</i>+1: Each line contains two space-separated integers that describe the competitors and results (the first integer, <i>A</i>, is the winner) of a single round of competition: <i>A</i> and <i>B</i></p>


输出:

<p>* Line 1: A single integer representing the number of cows whose ranks can be determined<br> </p>

题目大意:N个牛进行比赛,现在已知的是M个比赛中,牛x>牛y;求能确定排名牛的数目;


思路:获得每两个牛的关系,如果这个牛胜过a个牛,输过b个牛,a+b=n-1,则可以确定;

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 101;
bool v[N][N];
int main()
{
    int n, m;
    scanf("%d%d",&n,&m);
    memset(v, 0, sizeof(v));
    for(int i=1; i<=m; i++)
    {
        int a, b;
        scanf("%d%d",&a,&b);
        v[a][b]=1;
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            for(int k=1; k<=n; k++)
                if(v[k][i]&&v[i][j])
                    v[k][j]=1; //至此确定所有牛关系;
    int ans = 0;
    for(int i=1; i<=n; i++)
    {
        int cnt = 0;
        for(int j=1;j<=n;j++)
        {
            if(v[j][i])
                cnt++;
            if(v[i][j])
                cnt++;
        }
        if(cn==n-1)
            ans++;
    }
    printf("%d\n", ans);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wentong_xu/article/details/80504030