逃生

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 877 Accepted Submission(s): 236





Problem Description

糟糕的事情发生啦,如今大家都忙着逃命。可是逃命的通道非常窄,大家仅仅能排成一行。



如今有n个人,从1标号到n。同一时候有一些奇怪的约束条件,每一个都形如:a必须在b之前。

同一时候,社会是不平等的。这些人有的穷有的富。

1号最富,2号第二富,以此类推。

有钱人就贿赂负责人。所以他们有一些优点。



负责人如今能够安排大家排队的顺序,因为收了优点。所以他要让1号尽量靠前。假设此时还有多种情况,就再让2号尽量靠前。假设还有多种情况,就让3号尽量靠前。以此类推。

那么你就要安排大家的顺序。我们保证一定有解。





Input

第一行一个整数T(1 <= T <= 5),表示測试数据的个数。

然后对于每一个測试数据,第一行有两个整数n(1 <= n <= 30000)和m(1 <= m <= 100000),分别表示人数和约束的个数。

然后m行,每行两个整数a和b,表示有一个约束a号必须在b号之前。a和b必定不同。

Output

对每一个測试数据,输出一行排队的顺序。用空格隔开。





Sample Input

1

5 10

3 5

1 4

2 5

1 2

3 4

1 4

2 3

1 5

3 5

1 2





Sample Output

1 2 3 4 5





Author

CLJ





Source

BestCoder Round #1

  1. /**********************************************
  2.  
  3. author : Grant Yuan
  4. time : 2014.7.29
  5. algorithm: topological_sort
  6. source : HDU 4857
  7.  
  8. **********************************************/
  9.  
  10. #include<iostream>
  11. #include<cstdio>
  12. #include<cstring>
  13. #include<cstdlib>
  14. #include<algorithm>
  15. #include<vector>
  16. #include<stack>
  17. #include<queue>
  18. #define MAX 30007
  19. using namespace std;
  20.  
  21. int n,m;
  22. priority_queue<int> q;
  23. vector<int> G[MAX];
  24. int num[MAX];
  25. int lu[MAX];
  26.  
  27. int main()
  28. { int a,b,t;
  29. scanf("%d",&t);
  30. while(t--){
  31. memset(lu,0,sizeof(lu));
  32. memset(num,0,sizeof(num));
  33. scanf("%d%d",&n,&m);
  34. memset(G,0,sizeof(G));
  35. while(!q.empty()){
  36. q.pop();
  37. }
  38. for(int i=1;i<=m;i++)
  39. {
  40. scanf("%d%d",&a,&b);
  41. G[b].push_back(a);
  42. num[a]++;
  43.  
  44. }
  45.  
  46. for(int i=1;i<=n;i++)
  47. {
  48. if(num[i]==0)
  49. q.push(i);
  50. }
  51. int i;int p=n;
  52. while(1){
  53. if(q.empty())
  54. break;
  55. i=q.top();
  56. q.pop();
  57. lu[p--]=i;
  58. for(int j=0;j<G[i].size();j++)
  59. {
  60. num[G[i][j]]--;
  61. if(num[G[i][j]]==0)
  62. q.push(G[i][j]);
  63. }
  64. }
  65. for(int i=1;i<=n;i++)
  66. {
  67. if(i<n) printf("%d ",lu[i]);
  68. else printf("%d",lu[i]);
  69. }
  70. printf("\n");
  71. }
  72. return 0;
  73. }

HDU 4857 topological_sort的更多相关文章

  1. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  2. HDU 4857

    HDU 4857 (反向拓扑排序 + 优先队列) 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须 ...

  3. codeforce E - Minimal Labels+hdu 4857

    两个题目的意思差不多 都是希望得出的拓扑序如果有多种 要求输出字典序小的情况 这里引用一个大佬的博客 关于为什么不能直接建图然后用小根堆解决这个问题(http://blog.csdn.net/rgno ...

  4. HDU 4857 逃生 (反向拓扑排序 & 容器实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  5. HDU 4857 逃生 (优先队列+反向拓扑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 解题报告:有n个点,有m个条件限制,限制是像这样的,输入a  b,表示a必须排在b的前面,如果不 ...

  6. hdu 4857 逃生

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能 ...

  7. (hdu) 4857 逃生 (拓扑排序+优先队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄 ...

  8. HDU 4857 Couple doubi(找循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4861 解题报告:桌子上有k个球 ,第i个球的价值wi = 1^i+2^i+...+(p-1)^i (m ...

  9. hdu 4857 逃生 拓扑排序+PQ,剥层分析

    pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...

随机推荐

  1. 身为前端开发工程师,你需要了解的搜索引擎优化SEO.

    网站url网站创建具有良好描述性.规范.简单的url,有利于用户更方便的记忆和判断网页的内容,也有利于搜索引擎更有效的抓取您的网站.网站设计之初,就应该有合理的url规划. 处理方式: 1.在系统中只 ...

  2. 基础训练 2n皇后问题

    2n皇后问题 #include<iostream> #include<vector> using namespace std; int cnt = 0, n; vector&l ...

  3. 爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py

    在使用爬虫中,经常会遇到网页请求数据是经过 JS 处理的,特别是模拟登录时可能有加密请求.而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间.这时不要着急使用 S ...

  4. 在 Yii2 项目中使用 Composer 添加 FontAwesome 字体资源

    2014-06-21 19:05 原文 简体 繁體 2,123 次围观 前天帮同事改个十年前的网站 bug,页面上一堆 include require 不禁让人抱头痛哭.看到 V2EX 上的讨论说,写 ...

  5. php在字符串中替换多个字符

    php替换多个字符串str_replace函数 echo str_replace(array("m","i"),array("n",&quo ...

  6. Leetcode 378.有序矩阵中第k小的元素

    有序矩阵中第k小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, ...

  7. 九度oj 题目1354:和为S的连续正数序列

    题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...

  8. LINUX远程强制重启/proc/sys/kernel/sysrq /proc/sysrq-trigger

    1.     # echo 1 > /proc/sys/kernel/sysrq 2.     # echo b > /proc/sysrq-trigger 1. /proc/sys/ke ...

  9. cell展开的几种方式

    一.插入新的cell 原理: (1)定义是否展开,和展开的cell的下标 @property (assign, nonatomic) BOOL isExpand; //是否展开 @property ( ...

  10. 【bzoj4804】欧拉心算 欧拉函数

    题目描述 给出一个数字N 输入 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10^7 输出 按读入顺序输出答案. 样例输入 1 1 ...