poj3660 Cow Contest

題目鏈接:http://poj.org/problem?id=3660
題意:有一場牛牛競賽,總共有n只牛,有m場比賽,每場比賽告訴你A打贏了B,現在問你m場比賽下來,有幾隻牛的排名是能被確定的
解析:如果一隻牛能確定排名,那麼他一定跟其他n-1只牛有勝負關係,那麼我們就可以確定這隻牛的排名了,勝負關係其實就是一條單向邊,其實只要求有多少隻牛的度爲n-1即可,不過有一個條件是,如果A打贏B,B打贏C,那麼A就打贏了C,所以需要鬆弛,這裏點很少,直接Floyd了

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
using namespace std;
int a[105][105];
int main(void)
{
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        a[x][y] = 1;
    }
    int ans = 0;
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(a[i][k]&&a[k][j])
                    a[i][j] = 1;
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        int sum = 0;
        for(int j=1;j<=n;j++)
        {
            if(j==i) continue;
            if(a[i][j] || a[j][i])
                sum++;
        }
        if(sum==n-1)
            ans++;
    }
    printf("%d\n",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章