博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1285:确定比赛名次(拓扑排序)
阅读量:7281 次
发布时间:2019-06-30

本文共 1639 字,大约阅读时间需要 5 分钟。

确定比赛名次

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24877    Accepted Submission(s): 9982


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
 

Author
SmallBeer(CML)
 

Source
思路:显然使用拓扑排序,基本思想是建个有向图,从入度为0的点开始输出,同时取消该点的出度,应为这题同等级的从小到大输出,故使用优先队列。

使用前向星+优先队列版本:

# include 
# include
# include
# include
using namespace std;int pre[503], in[503], cnt=0;int n, m, a, b;struct Edge{ int e, last;}edge[501<<2];void Add_edge(int s, int e){ edge[cnt].e = e; edge[cnt].last = pre[s]; pre[s] = cnt++;}void solve(){ int k=0; priority_queue
, greater
>q; for(int i=1; i<=n; ++i) if(in[i] == 0) { q.push(i); --in[i]; } while(!q.empty()) { int t = q.top(); q.pop(); printf("%d%c",t,++k==n?'\n':' '); for(int i=pre[t]; i!=-1; i=edge[i].last) { Edge tmp = edge[i]; --in[tmp.e]; if(in[tmp.e] == 0) q.push(tmp.e); } }}int main(){ while(~scanf("%d%d",&n,&m)) { memset(pre, -1, sizeof(pre)); memset(in, 0, sizeof(in)); cnt = 0; while(m--) { int i; scanf("%d%d",&a,&b); for(i=pre[a]; i!=-1; i=edge[i].last)//去重边 if(edge[i].e == b) break; if(i != -1) continue; ++in[b];//记录入度 Add_edge(a, b); } solve(); } return 0;}

转载于:https://www.cnblogs.com/junior19/p/6729900.html

你可能感兴趣的文章
adbWireless 简单教程
查看>>
Hadoop Version History and Feature
查看>>
html5手机网站需要加的那些meta/link标签,html5 meta全解
查看>>
Codeforces Beta Round #9 (Div. 2 Only) B. Running Student 水题
查看>>
Educational Codeforces Round 12 F. Four Divisors 求小于x的素数个数(待解决)
查看>>
PHPer书单
查看>>
沉浸式导航栏
查看>>
Python中docstring文档的写法
查看>>
SSH配置文件和SSM配置文件的写法
查看>>
获取图片中感兴趣区域的信息(Matlab实现)
查看>>
NPO与X7R、X5R、Y5V、Z5U神马的有啥区别
查看>>
掌握 Linux 调试技术
查看>>
安装第三方模块方法和requests
查看>>
Log Parser 2.2 + Log Parser Lizard GUI 分析IIS日志示例
查看>>
不错的linux下通用的java程序启动脚本(转载)
查看>>
[LeetCode] Frog Jump 青蛙过河
查看>>
EF架构随心所欲打造属于你自己的DbModel【转】
查看>>
caffe中关于数据进行预处理的方式
查看>>
Jquery之ShowLoading遮罩组件
查看>>
C#扩展方法
查看>>