題目鏈接: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;
}