题目的意思是说有n头牛比赛,m种比赛结果,最后问你一共有多少头牛的排名被确定了,其中如果a战胜b,b战胜c,则也可以说a战胜c,即可以传递胜负。 这个题目考察的就是传递关系,类似于离散数学中的传递闭包。如果一头牛与所有别的牛的比赛结果都确定,就是说这头牛的位置是确定的用floyd来求出传递闭包。然后判断,输出。
#include "stack"
#include "cstdio"
#include "iostream"
#include "cmath"
#include "set"
#include "sstream"
#include "cctype"
#include "string"
#include "cstring"
#include "algorithm"
#include "queue"
//#include "map"
using namespace std;
#define LL long long
#define inf 0x7ffffff
#define pa pair<int,int>
#define pi 3.1415926535897932384626433832795028841971
const int M=105;
int main()
{
int i,j,k;
int n,m;
int dis[M][M];
while(~scanf("%d%d",&n,&m))
{
memset(dis,0,sizeof(dis));
for(i=0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
//dis[a][b]=inf;
dis[a][b]=1;
}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(dis[i][k]&&dis[k][j])
dis[i][j]=1;
}
}
}
int ans=0,cnt;
for(i=1;i<=n;i++)
{
cnt=n-1;
for(j=1;j<=n;j++)
if(dis[i][j]||dis[j][i])
cnt--;
if(!cnt)
ans++;
}
printf("%d\n",ans);
}
}