寒假训练专题三-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博客