HDU 1285--确定比赛名次【拓扑排序 amp;amp; 邻接表实现】
确定比赛名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17134 Accepted Submission(s): 6789
。N进行比赛。比赛结束后,裁判委员会要将全部參赛队伍从前往后依次排名,但如今裁判委员会不能直接获得每一个队的比赛成绩。仅仅知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。
如今请你编程序确定排名。
其它说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的。即输入数据确保一定能有一个符合要求的排名。
注意两点:
(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; 邻接表实现】相关推荐
- HDU 1285 确定比赛名次 拓扑排序(邻接矩阵 邻接表
确定比赛名次 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- [ACM] hdu 1285 确定比赛 (拓扑排序)
确定比赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1285 - 确定比赛名次(拓扑排序)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- [ACM] hdu 1285 确定比赛名次 (拓扑排序)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU-1285 确定比赛名次 拓扑排序
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1285 确定比赛名次
//拓扑排序裸题,题目要求按编号从小到大输出,要换一种思维去思考 //按照数据结构课本的算法,建立邻接表,用栈实现.初始化先将入度为0的顶点入栈,然后以栈顶顶点为准,先将栈顶顶点出栈输出它的信息,然后 ...
- C++实现拓扑排序(vector模拟邻接表存储,优先队列实现)
代码如下: #include <iostream> #include <queue> #include <vector> using namespace std; ...
- C++实现拓扑排序(vector模拟邻接表存储,栈实现)
代码如下: #include<iostream> #include <vector> #include <string> #include <stack> ...
- HDU - 128 确定比赛名次(基于有向无环图(GAD)的排序--拓扑排序)
题目链接:https://vjudge.net/contest/325616#problem/A 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N,进行比赛,比赛结束 ...
最新文章
- Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)
- python UnicodeEncodeError 编码错误总结
- 关于MySQL count(distinct) 逻辑的另一个bug
- JavaScript Date 对象
- Go语言web框架beego:目录说明
- lc滤波器是利用电感的感抗_电感知识
- SQL Server统计信息以及如何在SQL中执行更新统计信息
- 微软:警惕 Web3 和去中心化网络中的“冰钓”威胁
- 使用loadrunner进行服务器性能测试(winsocket)
- tensorflow应用问题记录
- 3Dmax读取丢失的贴图的方法
- 【视频通话卡顿】【语音通话卡顿】PC端QQ、微信每天接通语音电话或视频通话总会出现首卡半分钟左右的童鞋请进
- IDEA导入插件依赖后Maven报错:java.lang.RuntimeException: Cannot reconnect.
- 小学生python趣味编程-Python少儿趣味编程
- python解椭圆方程的例题_如何用python从3个点求椭圆方程
- python中占位符可以用什么_python占位符都有什么
- 连接宽带出现:调制解调器出现一个错误
- 【matlab】GUI信号发生器软面板
- 优酷爱奇艺等已叫停引进海外剧:英美剧日本动漫皆受影响
- 整理:著名软件是使用什么语言写的?