poj3660 Cow Contest
2016-07-22 11:53
225 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int m,n,i,j,k,a,b,ans;
int e[110][110];
while(~scanf("%d%d",&n,&m))
{
memset(e,0,sizeof(e));
for(i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
e[a][b]=1;
}
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
if(e[i][k]==1&&e[k][j]==1)//如果i赢k,k赢j,则i赢j
e[i][j]=1;
}
int count=0;
for(i=1;i<=n;i++)
{
ans=0;
for(j=1;j<=n;j++)
{
if(e[i][j])//顶点i的出度
ans++;
if(e[j][i])顶点i的入度
ans++;
}
if(ans==n-1)
count++;
}
printf("%d\n",count);
}
}
题意大致为,给你N头牛,他们之间进行进行M场比赛来确定排名,如果A赢B,B赢C,相应的可以确定A赢C;问最后可以确定排名的牛共几头;
可以用Floyd算法来解决,利用一个中间变量k,用e[i][j]来表示i与j之间的比赛结果,若i与j之间有比赛,则e[i][j]=1;制作一个有向图,若i赢j,则顶点i指向顶点j有一条路;
最后求出每个顶点的出度和入度之和,看是否等于n-1,若等,则可以确定此牛的排名。
#include<stdlib.h>
#include<string.h>
int main()
{
int m,n,i,j,k,a,b,ans;
int e[110][110];
while(~scanf("%d%d",&n,&m))
{
memset(e,0,sizeof(e));
for(i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
e[a][b]=1;
}
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
if(e[i][k]==1&&e[k][j]==1)//如果i赢k,k赢j,则i赢j
e[i][j]=1;
}
int count=0;
for(i=1;i<=n;i++)
{
ans=0;
for(j=1;j<=n;j++)
{
if(e[i][j])//顶点i的出度
ans++;
if(e[j][i])顶点i的入度
ans++;
}
if(ans==n-1)
count++;
}
printf("%d\n",count);
}
}
题意大致为,给你N头牛,他们之间进行进行M场比赛来确定排名,如果A赢B,B赢C,相应的可以确定A赢C;问最后可以确定排名的牛共几头;
可以用Floyd算法来解决,利用一个中间变量k,用e[i][j]来表示i与j之间的比赛结果,若i与j之间有比赛,则e[i][j]=1;制作一个有向图,若i赢j,则顶点i指向顶点j有一条路;
最后求出每个顶点的出度和入度之和,看是否等于n-1,若等,则可以确定此牛的排名。
相关文章推荐
- android:layout_gravity和android:gravity的区别
- DBA成长之路数据库设计之软件开发周期
- Java 完美判断中文字符的方法
- poi 操作excel 常用操作(未测试)
- Smrty模版总结(转)
- hdu 5745(2016 Multi-University Training Contest 2)
- Java实现GB2312文件转UTF8文件
- 博客园新语言代码高亮以及OpenLiveWriter插件开发(一)
- Websocket协议的学习、调研和实现
- 解决手机浏览器和微信中select中border:none;无用和去掉小三角
- Qt之加载QSS文件
- 用CSS制作登录界面
- 原型模式
- LLVM 3.0类型系统重写
- UVA 11419 SAM I AM 二分匹配最小覆盖点
- Eventbus的第一次接触
- 【问题】未找到与约束~匹配的导出
- POJ 2886 Who Gets the Most Candies?
- linux下安装mysql最简教程
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用