POJ3660 Cow Contest
题意:N个选手,如果A比B强,B比C强,则A必比C强。告知若干个强弱关系,问有多少人的排名可以确定
思路:设x个人比你强,y个人比你若,则当x+y==n-1时,才可以确定你的排名
#include<iostream>
#include<cstdio>
using namespace std;
const int inf=1e9;
const int maxn=1e3+5;
int mp[maxn][maxn],ans,n,m,x,y;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)mp[i][j]=0;
else mp[i][j]=inf;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
mp[x][y]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++){
if(mp[j][i]+mp[i][k]<mp[j][k]){
mp[j][k]=1;
}
}
for(int i=1;i<=n;i++){
int sum=0;
for(int j=1;j<=n;j++){
if(i==j)continue;
if(mp[i][j]!=inf)sum++;
else if(mp[j][i]!=inf)sum++;
}
if(sum==n-1)ans++;
}
printf("%d\n",ans);
}