思路
这道题其实不难,主要难在不好判断有哪些奶牛的排名可以确定,但这个问题其实非常好解决:入度+出度=N-1的奶牛都可以确定,反之不可以确定。
然后,若奶牛i能打败奶牛k,而奶牛k可以打败奶牛j,那么,奶牛i一定可以打败奶牛j(这不是废话吗)。
只要来一波无脑Floyd,确定每一个节点的出度数和入度数即可。
说句题外话,国外的题要不要这么搞⛏?奶牛开编程大赛,为毛我感觉讽刺意味好浓呢QAQ?
Code
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdlib>
#define int long long
using namespace std;
int G[101][101];
int N,M,A,B,ans,tans;
signed main()
{
scanf("%ld%ld",&N,&M);
for(int i=1;i<=M;i++)
{
scanf("%ld%ld",&A,&B);
G[A][B]=1;
}
for(int k=1;k<=N;k++)
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
if(G[i][k]&&G[k][j])
G[i][j]=1;
for(int i=1;i<=N;i++)
{
tans=0;
for(int j=1;j<=N;j++)
{
tans+=G[i][j]+G[j][i];
}
if(tans==N-1)
{
ans++;
}
}
printf("%d",ans);
return 0;
}