【hzoj 1285】确定比赛名次
来源:互联网 发布:有效抵御网络黑客攻击 编辑:程序博客网 时间:2024/05/18 15:26
Problem Description
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
Input
输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
Output
给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
Sample Input
4 3
1 2
2 3
4 3
Sample Output
1 2 4 3
拓扑排序。
网址: http://www.tuicool.com/articles/63UrQb
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=500+5;int l[maxn];bool b[maxn][maxn];void topsort(int n){ int k=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(l[j]==0) { printf("%d%c",j,i==n?'\n':' '); l[j]--; k=j; break; } } for(int j=1;j<=n;j++) { if(b[k][j]==true) { b[k][j]=false; l[j]--; } } }}int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { int u,v; memset(l,0,sizeof(l)); memset(b,0,sizeof(b)); while(m--) { scanf("%d%d",&u,&v); if(b[u][v]==false) { b[u][v]=true; l[v]++; } } topsort(n); } return 0;}
邻接表+优先队列
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int MAXN = 100000 + 5;int first[MAXN],next[MAXN];int ru[MAXN];int n,m;int tot;void init(){ memset(first,-1,sizeof(first)); tot = 0; return;}struct edge{ int f,t;}l[MAXN << 1];void build(int f,int t){ l[++tot] = (edge) {f,t}; next[tot] = first[f]; first[f] = tot; return;}void top_sort(int n){ priority_queue<int, vector<int>, greater<int> > q; for(int i = 1;i <= n;i ++) { if(ru[i]==0) { q.push(i); ru[i]--; } } int k=0; while(!q.empty()) { int u = q.top(); q.pop(); printf("%d%c", u, k++ == n ? '\n' : ' '); for(int i = first[u];i != -1;i = next[i]) { ru[l[i].t] --; if(ru[l[i].t]==0) q.push(l[i].t); } } return;}int main(){ scanf("%d%d",&n,&m); init(); memset(ru,0,sizeof(ru)); int f,t; for(int i = 1;i <= m;i ++) { scanf("%d%d",&f,&t); build(f,t); ru[t] ++; } top_sort(n); return 0;}
阅读全文
0 0
- 【hzoj 1285】确定比赛名次
- 1285确定比赛名次
- HDU 1285 确定比赛名次
- hdu 1285 确定比赛名次
- HDu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- HDU-1285-确定比赛名次
- poj 1285 确定比赛名次
- hdu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- hdu 1285 确定比赛名次
- Hdu 1285 确定比赛名次
- HDU 1285 确定比赛名次
- HDU 1285 确定比赛名次
- 鼓励自己!我能行
- 在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器
- centos 添加环境变量
- springmvc 解决中文乱码
- 基于快递100 写的,快递查询快捷嵌入商城项目
- 【hzoj 1285】确定比赛名次
- 机器人
- 认识C++面向对象的特性
- 获取网络json解析中的图片
- 【算法】图的最小生成树(Prim算法)
- electron入门
- 用jQuery和easyui实现登录验证的小功能
- ERR_CACHE_MISS 上一页提示确认重新提交表单
- CSS基本语法及页面引用(一)