n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移。输出序列

大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得到的序列就是从大到小的,最后倒序输出就行了。

写这题的时候头好痛阿肚子好痛阿,再也不想熬夜了,一点效率都没有。

  1. /** @Date : 2017-09-29 19:29:12
  2. * @FileName: HDU 4857 拓扑排序 + 优先队列.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoungEarlf@gmail.com)
  5. * @Link : https://github.com/
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair<int ,int>
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 1e5+20;
  22. const double eps = 1e-8;
  23.  
  24. int deg[30010];
  25. vector<int>edg[30010];
  26. int ans[30010];
  27. int top(int n)
  28. {
  29. priority_queue<int, vector<int>, less<int> >q;
  30. for(int i = 1; i <= n; i++)
  31. if(deg[i] == 0/* && edg[i].size() > 0*/)
  32. q.push(i);
  33. int cnt = 0;
  34. while(!q.empty())
  35. {
  36. int nw = q.top();
  37. q.pop();
  38. for(auto i: edg[nw])
  39. {
  40. deg[i]--;
  41. if(deg[i] == 0)
  42. q.push(i);
  43. }
  44. ans[cnt++] = nw;
  45. }
  46. /*for(int i = 1; i <= n; i++)
  47. if(deg[i] == 0)
  48. ans[cnt++] = i;*/
  49. return cnt;
  50. }
  51.  
  52. int main()
  53. {
  54. int T;
  55. cin >> T;
  56. while(T--)
  57. {
  58. int n, m;
  59. scanf("%d%d", &n, &m);
  60. for(int i = 0; i <= n; i++)
  61. edg[i].clear();
  62. MMF(deg);
  63. for(int i = 0; i < m; i++)
  64. {
  65. int x, y;
  66. scanf("%d%d", &x, &y);
  67. int size = edg[y].size();
  68. edg[y].emplace_back(x);
  69. if(size != edg[y].size())
  70. deg[x]++;
  71. }
  72. int cnt = top(n);
  73. for(int i = cnt - 1; i >= 0; i--)
  74. printf("%d%s", ans[i], i==0?"\n":" ");
  75. }
  76. return 0;
  77. }

HDU 4857 拓扑排序 优先队列的更多相关文章

  1. 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  2. HDU 5638 拓扑排序+优先队列

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...

  3. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  4. HDU-4857-逃生-反向拓扑排序+优先队列

    HDU-4857 题意就是做一个符合条件的排序,用到拓扑序列. 我一开始wa了多发,才发现有几个样例过不了,发现1->2->3...的顺序无法保证. 后来就想用并查集强连,还是wa: 后来 ...

  5. HDU 4857 (反向拓扑排序 + 优先队列)

    题意:有N个人,M个优先级a,b表示a优先于b.而且每一个人有个编号的优先级.输出顺序. 思路来自:与PKU3687一样 在主要的拓扑排序的基础上又添加了一个要求:编号最小的节点要尽量排在前面:在满足 ...

  6. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

  7. POJ 3687 Labeling Balls【拓扑排序 优先队列】

    题意:给出n个人,m个轻重关系,求满足给出的轻重关系的并且满足编号小的尽量在前面的序列 因为输入的是a比b重,但是我们要找的是更轻的,所以需要逆向建图 逆向建图参看的这一篇http://blog.cs ...

  8. HDU1285 确定比赛问题【拓扑排序+优先队列】

    题目 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩, ...

  9. hdu 2647 (拓扑排序 邻接表建图的模板) Reward

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...

随机推荐

  1. 第一次spring冲刺第5天

    今天进行讨论基础功能的核心代码方面,还有简单的讨论继续关于界面的美化, 计算生成的答案功能 public class Core {// char[]h={'+','-','*','/'};int re ...

  2. 学习Web Service、wcf、webapi的区别

    csdn:关于wcf,webservice,webapi或者其他服务或者接口有什么区别. wcf,webservice采用的是rpc协议,这个协议很复杂,所以每次要传递.要校验的内容也很复杂,别看我们 ...

  3. PyCharm 配置远程python解释器和在本地修改服务器代码

    PyCharm 配置远程python解释器和在本地修改服务器代码 最近在学习机器学习的过程中,常常需要将本地写的代码传到GPU服务器中,然后在服务器上运行.之前的做法一直是先在本地写好代码,然后通过F ...

  4. 在虚拟机中安装Ubuntu详细过程

    参考:http://blog.csdn.net/u013142781/article/details/50529030

  5. 转 js事件探秘

    Javascript中的事件,可以和html交互. 事件流IE&Opera:事件冒泡其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至 ...

  6. TiDB注意事项

    公司最近在上测试的TiDB集群,这款数据库类似MySQL,但又不完全一致,在使用的时候有一下注意事项,在这里记录一下.

  7. scrapy-下载器中间件

    from faker import Faker class MySpiderMiddleware(object): def __init__(self): self.fake = Faker() de ...

  8. mysql数据优化--数据库结构的优化

    1,比如存时间类型的就使用int类型   其中mysql的两个函数可以拿来使用 unix_timestamp 将时间日期转化为时间戳

  9. [转帖]Docker五种存储驱动原理及应用场景和性能测试对比

    Docker五种存储驱动原理及应用场景和性能测试对比 来源:http://dockone.io/article/1513 作者: 陈爱珍 布道师@七牛云   Docker最开始采用AUFS作为文件系统 ...

  10. Windows 作为 openssl server端时的处理

    1. 跟上一个博客一样, 下载openssh 然后安装时 同时选择 server端. 2. 安装时设置密码 其他默认即可 3. xshell 创建连接. 注意 我使用的是 administrator ...