寒假训练专题三-L.cow contest


奶牛竞赛

题意:

有n个奶牛的编程能力各不同,经过m次比赛(一定会有胜负的比赛),输出能确定排名的奶牛

思路:

比赛过的奶牛建立边,再通过弗洛伊德的办法,借助于其他奶牛间接比赛建立边关系,前提是中间的元素需要作为一个输家一个赢家

最后只要查询是否和所有奶牛都建立了边

#include
#include
using namespace std;
const int N=101;
int f[N][N];
int n,m; 
signed main()
{
	memset(f,0,sizeof(f));
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		f[u][v]=u;
		//f[v][u]=u;		//改进,去掉,使其仅表示胜利的边
	}
	for(int k=1;k<=n;k++)
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	{
	/*	if(i!=j&&f[i][j]==0)
		{
			if(f[i][k]==i&&f[k][j]==k)
			{
				f[i][j]=i;
				f[j][i]=i;
			}
		}*/
     	if(!f[i][j]&&f[i][k]&&f[k][j])
        {
            f[i][j]=1;
        }
	}
        
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		int cnt=0;
		for(int j=1;j<=n;j++)
		{
	//		if(f[i][j]!=0)
	//		{
	//			cnt++;
	///		}
            if(f[i][j]||f[j][i])
            {
                cnt++;
            }
		}
		if(cnt==n-1) ans++;
	}
	
	cout<

还有一种图遍历的方法

(40条消息) 【USACO】2008 Jan Cow Contest 奶牛比赛_Bobby_Z的博客-CSDN博客