确定比赛名次

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

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

注意两点:

(1):输入的时候可能存在重边。邻接表处理的时候不用考虑。

(2):题目要求输出时编号小的在前, 所以用优先队列来存储

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;struct node {int u, v, next;
};int n, m;
node edge[550 * 550];
int in[550];
int head[550], cnt;
int sum[550];void init(){cnt = 0;memset(head, -1, sizeof(head));memset(in, 0, sizeof(in));memset(sum, 0, sizeof(sum));
}void add(int u, int v){edge[cnt] = {u, v, head[u]};head[u] = cnt++;
}void topsort(){int ans = 0;priority_queue<int,vector<int>,greater<int> >q;for(int i = 1; i <= n; ++i){if(in[i] == 0)q.push(i);}while(!q.empty()){int u = q.top();sum[ans++] = u;q.pop();for(int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].v;in[v]--;if(in[v] == 0)q.push(v);}}for(int i = 0 ; i < ans; ++i){if(!i)printf("%d", sum[i]);elseprintf(" %d", sum[i]);}printf("\n");
}int main(){while(scanf("%d%d", &n, &m) != EOF){init();while(m--){int a, b;scanf("%d%d", &a, &b);add(a, b);in[b]++;}topsort();}return 0;
}

转载于:https://www.cnblogs.com/gavanwanggw/p/7079791.html

HDU 1285--确定比赛名次【拓扑排序 amp;amp; 邻接表实现】相关推荐

  1. HDU 1285 确定比赛名次 拓扑排序(邻接矩阵 邻接表

    确定比赛名次 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description ...

  2. [ACM] hdu 1285 确定比赛 (拓扑排序)

    确定比赛 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. HDU 1285 - 确定比赛名次(拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. [ACM] hdu 1285 确定比赛名次 (拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. HDU-1285 确定比赛名次 拓扑排序

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)           ...

  6. hdu 1285 确定比赛名次

    //拓扑排序裸题,题目要求按编号从小到大输出,要换一种思维去思考 //按照数据结构课本的算法,建立邻接表,用栈实现.初始化先将入度为0的顶点入栈,然后以栈顶顶点为准,先将栈顶顶点出栈输出它的信息,然后 ...

  7. C++实现拓扑排序(vector模拟邻接表存储,优先队列实现)

    代码如下: #include <iostream> #include <queue> #include <vector> using namespace std; ...

  8. C++实现拓扑排序(vector模拟邻接表存储,栈实现)

    代码如下: #include<iostream> #include <vector> #include <string> #include <stack> ...

  9. HDU - 128 确定比赛名次(基于有向无环图(GAD)的排序--拓扑排序)

    题目链接:https://vjudge.net/contest/325616#problem/A 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N,进行比赛,比赛结束 ...

最新文章

  1. Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)
  2. python UnicodeEncodeError 编码错误总结
  3. 关于MySQL count(distinct) 逻辑的另一个bug
  4. JavaScript Date 对象
  5. Go语言web框架beego:目录说明
  6. lc滤波器是利用电感的感抗_电感知识
  7. SQL Server统计信息以及如何在SQL中执行更新统计信息
  8. 微软:警惕 Web3 和去中心化网络中的“冰钓”威胁
  9. 使用loadrunner进行服务器性能测试(winsocket)
  10. tensorflow应用问题记录
  11. 3Dmax读取丢失的贴图的方法
  12. 【视频通话卡顿】【语音通话卡顿】PC端QQ、微信每天接通语音电话或视频通话总会出现首卡半分钟左右的童鞋请进
  13. IDEA导入插件依赖后Maven报错:java.lang.RuntimeException: Cannot reconnect.
  14. 小学生python趣味编程-Python少儿趣味编程
  15. python解椭圆方程的例题_如何用python从3个点求椭圆方程
  16. python中占位符可以用什么_python占位符都有什么
  17. 连接宽带出现:调制解调器出现一个错误
  18. 【matlab】GUI信号发生器软面板
  19. 优酷爱奇艺等已叫停引进海外剧:英美剧日本动漫皆受影响
  20. 整理:著名软件是使用什么语言写的?

热门文章

  1. 「SAP技术」 SAP MM 已启用质检物料创建PO时候'STOCK TYPE'没有默认为X?
  2. 闻声识人时代将至?多家企业争相布局
  3. 战略突破!又一国产芯片巨头即将追赶华为,成为思科的替代者?
  4. 这个人工智能强到让人感到害怕
  5. 深度学习领域四个不可不知的重大突破
  6. 心得丨8个深度学习方面的最佳实践
  7. 机器学习的大局:用神经网络和TensorFlow分类文本
  8. 边缘计算4.0正急速驶来,你做好准备了吗?
  9. AI 如果 “智力爆炸” ,只有普通智力的人类是蝼蚁还是宠物?
  10. 数据智能是大数据的未来