HDU 1285-确定比赛名次(拓扑排序)
来源:互联网 发布:mac对应pin码查询网 编辑:程序博客网 时间:2024/06/05 09:38
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285
确定比赛名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 27303 Accepted Submission(s): 10919
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 31 22 34 3
Sample Output
1 2 4 3//简单的拓扑排序, 31ms#include <stdio.h>#include <string.h>#define maxn 505bool vit[maxn][maxn]; //存图int deg[maxn]; //入度void toposort(int n){for(int i=1; i<=n; i++){int u;for(int j=1; j<=n; j++){if(deg[j]==0){deg[j]--;u = j;if(i!=n){printf("%d ", u);}elseprintf("%d\n", u);break;}}for(int j=1; j<=n; j++){if(vit[u][j]){deg[j]--;}}}}int main(){int N, M;while(~scanf("%d%d", &N, &M)){memset(vit, false, sizeof(vit));memset(deg, 0, sizeof(deg));for(int i=0; i<M; i++){int a, b;scanf("%d%d", &a, &b);//如果被同一个人打败多次, 则只记录一个if(!vit[a][b]){vit[a][b] = true;deg[b]++;}}toposort(N);}return 0;}//用优先队列优化, 15ms//用优先队列实现拓扑排序#include <stdio.h>#include <string.h>#include <queue>#include <vector>#include <algorithm>#define maxn 505using namespace std;int deg[maxn];vector<int>vec[maxn];void toposort(int n){priority_queue<int, vector<int>, greater<int> >q;while(!q.empty())q.pop();for(int i=1; i<=n; i++)if(deg[i]==0){q.push(i);deg[i]--;}int k = 1;while(!q.empty()){int u = q.top();q.pop();int l = vec[u].size();printf("%d%c", u, k++ == n ? '\n' : ' ');//输出for(int i=0; i<l; i++){deg[vec[u][i]]--;if(deg[vec[u][i]]==0)q.push(vec[u][i]);}}}int main(){int N, M;while(scanf("%d%d", &N, &M)!=EOF){for(int i=0; i<maxn; i++){vec[i].clear();deg[i] = 0;}for(int i=0; i<M; i++){int a, b;scanf("%d%d", &a, &b);vector<int>::iterator it;it = find(vec[a].begin(), vec[a].end(), b);if(it==vec[a].end()){vec[a].push_back(b);deg[b]++;}}toposort(N);}return 0;}
阅读全文
0 0
- HDU 1285 拓扑排序 确定比赛名次
- HDU 1285 拓扑排序-- 确定比赛名次
- hdu 1285 确定比赛名次(拓扑排序)
- HDU 1285 确定比赛名次 拓扑排序
- 【HDU】1285 确定比赛名次 拓扑排序
- HDU【1285】确定比赛名次---拓扑排序
- HDU-1285--确定比赛名次 (拓扑排序)
- 【拓扑排序】HDU 1285--- 确定比赛名次
- hdu 1285 确定比赛名次 拓扑排序
- hdu 1285 确定比赛名次 拓扑排序
- hdu 1285 确定比赛名次 拓扑排序
- HDU 1285 确定比赛名次 拓扑排序
- HDU 1285 - 确定比赛名次 <拓扑排序>
- 拓扑排序:hdu 1285 确定比赛名次
- 拓扑排序 HDU 1285 确定比赛名次
- Hdu 1285 确定比赛名次,拓扑排序
- hdu 1285 确定比赛名次(拓扑排序)
- hdu 1285 确定比赛名次(拓扑排序)
- 用递归解决oj上的导弹防御系统问题
- 组态王与阿里云mysql连接——pc组态王配置
- 特征提取模型系列之spp-net原理介绍
- HOG特征统计
- HDU1283 最简单的计算机【模拟】
- HDU 1285-确定比赛名次(拓扑排序)
- Unity_脚本和光照系统的结合使用_010
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
- 【Go】Go语言初学
- scala基础语法
- 面向对象和静态方法与非静态方法的变量调用问题
- poj2777Count Color (线段树)
- ajax请求之前插入提示用户正在处理请稍等
- PARTICLE SYSTEM MESHES WILL ONLY WORK WITH EXACTLY ONE (1) SUB MESH