确定比赛名次

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

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

杭电ACM集训队训练赛(VII)

问题链接:HDU1285 确定比赛名次

问题简述:(略)

问题分析

这是一个拓扑排序的裸题,按照拓扑排序算法计算即可。

这里采用邻接矩阵(二维数组)存储图。一般而言,只有节点规模小的情况下,图才可以使用邻接矩阵表示,不然就太费存储了。

程序说明

下标为0的存储单元没有使用,浪费了存储,代码的下标转换不用做了,代码相对简洁。

题记:(略)

参考链接:(略)

AC的C++语言程序如下:

/* HDU1285 确定比赛名次 */#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;const int N = 500 + 1;
int g[N][N];
int degreein[N];
int ans[N];
int n, m;void toposort()
{for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(g[i][j])degreein[j]++;// 从节点号小的开始寻找for(int i = 1; i <= n; i++) {int k = 1;while(degreein[k] != 0)k++;ans[i] = k;degreein[k] = -1;// 去除已经找出的节点的入度for(int j = 1; j <= n; j++)if(g[k][j])degreein[j]--;}
}int main()
{while(~scanf("%d%d", &n, &m)) {// 初始化memset(g, 0, sizeof(g));memset(degreein, 0, sizeof(degreein));memset(ans, 0, sizeof(ans));// 读入数据int u, v;for(int i = 1; i <= m; i++) {scanf("%d%d", &u, &v);g[u][v] = 1;}// 拓扑排序toposort();// 输出结果for(int i = 1; i < n; i++)printf("%d ", ans[i]);printf("%d\n", ans[n]);}return 0;
}

HDU1285 确定比赛名次【拓扑排序】相关推荐

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

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

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

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

  3. 图论--拓扑排序--HDU-1285确定比赛名次

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  4. HDU1285确定比赛名次(拓扑排序+优先队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1285 思路 每场比赛的结果我们可以看成一个有向图,从胜利的一方指向失败的一方,在这个有向图的入度为0的 ...

  5. HDU1285 确定名次 拓扑排序

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

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

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

  7. 【拓扑排序】确定比赛名次

    HDU P1285 确定比赛名次 拓扑排序裸题qwq 注意:入度为一的点删掉之后,它的入度要更新为-1 这个题刷出了我人生中第一次PE 可还行qaq 我搜索PE是输出格式与标准输出不符, 结果发现语言 ...

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

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

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

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

最新文章

  1. 将redis当做使用LRU算法的缓存来使用
  2. QT、QTE、qtopia区别
  3. Silverlight OOB Setup
  4. 386个Linux发行版本中 你用过Ubuntu吗?
  5. 吴恩达深度学习1.2笔记_Neural Networks and Deep Learning_神经网络基础
  6. CCF NOI1076 进制转换
  7. R_ggplot2地理信息可视化_史上最全(一)
  8. 数据库索引失效的一些场景
  9. 通达OA 2011-2013 通杀GETSHELL
  10. 寒假学习报告 第一周 1.18
  11. 按周显示的日历和按月显示的日历,你需要吗
  12. MACHINE LEARNING ----BY HUNGYILEE (love u)
  13. 前端-css美化网页元素(一)字体样式,文本样式
  14. 【行业云说直播间】-智慧能源 低碳未来正式上线
  15. 从Google Play上下载apk
  16. 斑马打印机(zebraZT410R-203dpi)打印RFID标签流程
  17. python简易爬虫获取A股上证所有股票历史数据
  18. C/C++ 文件设备操作之CreateFile、ReadFile和WriteFile
  19. 查看本机directx版本
  20. IDEA推送本地代码到新远程git地址

热门文章

  1. 容器大小_C++复习篇(7)序列式容器vector
  2. WebSocket之JS发送二进制
  3. Android ListView常用用法(结合长按、数据库等)
  4. java xml 面试_Java程序员面试常见的10道XML面试题
  5. 广州电子厂房净化工程_医药厂房净化车间工程验收,怎么测定风速风量和换气次数?...
  6. 为什么派生的子类报错不能实例化抽象类_C# 接口与抽象类实例分析
  7. TensorFlow基础篇(七)——tf.nn.conv2d()
  8. Tensorflow精进之路(二):两层卷积神经网络模型训练MNIST
  9. OpenCV探索之路(零):HighGUI——使用imwrite调整保存的图片质量
  10. Linux下 C++遍历目录文件