水题模拟
建一个图,每两个牛进行比赛就连一条边,然后两遍dfs求出比他弱和比他强的牛,最后如果相加数量等于n,说明他能与全部的牛进行比较,排名确定。
#include<bits/stdc++.h> using namespace std; int mp1[110][110],mp2[110][110]; int n,m,ans; int f1[110],f2[110]; bool vis[110]; void dfs1(int x){ f1[x]++;vis[x]=1; for(int i=1;i<=n;i++){ if(!mp1[x][i]||vis[i])continue; dfs1(i); } } void dfs2(int x){ f2[x]++;vis[x]=1; for(int i=1;i<=n;i++){ if(!mp2[x][i]||vis[i])continue; dfs2(i); } } int main(){ scanf("%d%d",&n,&m); int u,v; for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); mp1[u][v]=1;mp2[v][u]=1; } for(int i=1;i<=n;i++){ dfs1(i); memset(vis,0,sizeof vis); } for(int i=1;i<=n;i++){ dfs2(i); memset(vis,0,sizeof vis); } for(int i=1;i<=n;i++)if(f1[i]+f2[i]-1==n)ans++; printf("%d",ans); return 0; }