题目传送门

题解:

如果正着连边,可以发现最困难的点是ti不好处理。

所以我们连反边,然后将ti转换成前面有n-ti+1架飞机起飞了作为限制条件。

对于第一问,直接toposort 然后反着输出求出的结果。

对于第二问,我们则枚举每个架飞机,然后在toposort的时候不把这个点入队,直到队列为空的时候,这个时候就是这架飞机的最早起飞时间了。

代码:

  1. /*
  2. code by: zstu wxk
  3. time: 2019/02/22
  4. */
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
  8. #define LL long long
  9. #define ULL unsigned LL
  10. #define fi first
  11. #define se second
  12. #define pb push_back
  13. #define lson l,m,rt<<1
  14. #define rson m+1,r,rt<<1|1
  15. #define lch(x) tr[x].son[0]
  16. #define rch(x) tr[x].son[1]
  17. #define max3(a,b,c) max(a,max(b,c))
  18. #define min3(a,b,c) min(a,min(b,c))
  19. typedef pair<int,int> pll;
  20. const int inf = 0x3f3f3f3f;
  21. const int _inf = 0xc0c0c0c0;
  22. const LL INF = 0x3f3f3f3f3f3f3f3f;
  23. const LL _INF = 0xc0c0c0c0c0c0c0c0;
  24. const LL mod = (int)1e9+;
  25. const int N = 1e5 + ;
  26. int n, m;
  27. vector<int> vc[N];
  28. vector<int> e[N];
  29. int ind[N], vis[N], t[N], ans[N];
  30. void init(){
  31. for(int i = ; i <= n; ++i) ind[i] = vis[i] = ;
  32. for(int i = ; i <= n; ++i){
  33. for(int j = ; j < e[i].size(); ++j){
  34. int v = e[i][j];
  35. ++ind[v];
  36. }
  37. }
  38. }
  39. int toposort(int ban){
  40. queue<int> q;
  41. for(int j = ; j < vc[n].size(); ++j){
  42. int v = vc[n][j];
  43. if(!ind[v] && v != ban){
  44. q.push(v);
  45. vis[v] = ;
  46. }
  47. }
  48. for(int k = n; k >= ; --k){
  49. if(q.empty()) return k;
  50. int x = q.front();
  51. q.pop();
  52. ans[k] = x;
  53. for(int j = ; j < e[x].size(); ++j){
  54. int v = e[x][j];
  55. if(v == ban) continue;
  56. ind[v]--;
  57. if(ind[v] == && t[v] >= k && !vis[v]){
  58. vis[v] = ;
  59. q.push(v);
  60. }
  61. }
  62. for(int j = ; j < vc[k-].size(); ++j){
  63. int v = vc[k-][j];
  64. if(v == ban) continue;
  65. if(!vis[v] && ind[v] == ){
  66. q.push(v);
  67. vis[v] = ;
  68. }
  69. }
  70. }
  71. return ;
  72. }
  73. void Ac(){
  74. for(int i = ; i <= n; ++i){
  75. scanf("%d", &t[i]);
  76. vc[t[i]].pb(i);
  77. }
  78. for(int i = ,u,v; i <= m; ++i){
  79. scanf("%d%d", &u, &v);
  80. e[v].pb(u);
  81. }
  82. init();
  83. toposort();
  84. for(int i = ; i <= n; ++i){
  85. printf("%d%c", ans[i], " \n"[i==n]);
  86. }
  87. for(int i = ; i <= n; ++i){
  88. init();
  89. printf("%d%c", toposort(i), " \n"[i==n]);
  90. }
  91. }
  92. int main(){
  93. while(~scanf("%d%d", &n, &m)){
  94. Ac();
  95. }
  96. return ;
  97. }
  98. /*
  99. 5 5
  100. 4 5 2 5 4
  101. 1 2
  102. 3 2
  103. 5 1
  104. 3 4
  105. 3 1
  106.  
  107. */

BZOJ-2535 航空管制 toposort的更多相关文章

  1. bzoj 2535 & bzoj 2109 航空管制 —— 贪心+拓扑序

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...

  2. BZOJ 2109 航空管制(拓扑排序+贪心)

    绝世好题啊.. 题意:给出一个DAG,和每个点要求出现在这个DAG里面的拓扑排序的位置<=ti,求出所有可能的拓扑排序里面每个点出现的位置的最小值. 正着做不好做,考虑反着做,建立这个图的反图. ...

  3. 2109&2535: [Noi2010]Plane 航空管制 - BZOJ

    Description世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上, ...

  4. BZOJ 2535:NOI 2010 航空管制

    [NOI2010]航空管制 题面请点上面. 首先第一问,我第一想法是把它放到一个小根堆中,然而这是不行的. 正确的思路是,把图反过来建,然后放到一个大根堆里去. 至于原因,感性理解一下,正着贪是有后效 ...

  5. BZOJ 2535: [Noi2010]Plane 航空管制2

    Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...

  6. 【BZOJ2109/2535】【NOI2010】航空管制(贪心)

    [BZOJ2109/2535][NOI2010]航空管制(贪心) 题面 BZOJ2109 BZOJ2535 题解 很好玩的一道题目 先看第一问,显然是要找一个合法的拓扑排序的序列. 直接拓扑排序,把队 ...

  7. bzoj 2109: [Noi2010]Plane 航空管制

    Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频 发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此, 小X表示很不满意. 在这次来烟台的 ...

  8. BZOJ2109: [Noi2010]Plane 航空管制

    Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频 发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此, 小X表示很不满意. 在这次来烟台的 ...

  9. BZOJ2535 [Noi2010]Plane 航空管制2

    Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...

随机推荐

  1. 你可能不知道的Docker资源限制

    What is 资源限制? 默认情况下,容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资源.Docker提供了一种控制分配多少量的内存.CPU或阻塞I/O给一个容器的方式,即通过在dock ...

  2. golang文档、中文、学习文档

    Golang中文文档地址 http://zh-golang.appspot.com/doc/ Golang非英文文档地址: https://github.com/golang/go/wiki/NonE ...

  3. 标签助手(TagHelper)

    1.什么是标签助手 Tag Helper 标签助手是服务端代码能够参与在 Razor 文件中创建和呈现HTML元素.例如,内置的 ImageTagHelper 可以将版本号追加到图像名称.无论何时更改 ...

  4. hdu 6397 Character Encoding (生成函数)

    Problem Description In computer science, a character is a letter, a digit, a punctuation mark or som ...

  5. 【Java例题】7.3 线程题3-素数线程

    3.素数线程.设计一个线程子类,依次随机产生10000个随机整数(100-999):再设计另一个线程子类,依次对每一个随机整数判断是不是素数,是则显示:然后编写主类,在主函数中定义这两个线程类的线程对 ...

  6. IPC机制2

    1.使用Messenger Messenger可以翻译为信使,通过它可以在不同进程中传递messenge对象,在messenge中放入我们需要传递的数据,就可以轻松实现数据在进程中传递. 服务段进程: ...

  7. h5微信浏览器复制粘贴--ios兼容问题的解决方法(clipboard.js插件)

    前段时间在做微信h5的时候,遇到了ios兼容,使用clipboard.js插件完美解决 下载地址:下载地址: https://github.com/zenorocha/clipboard.js cnd ...

  8. JavaScript 数组、字符串、Map、Set 方法整理

    在线阅读 https://www.kancloud.cn/chenmk/web-knowledges/1080519 数组 isArray():Array.isArray(value) 用于检测变量是 ...

  9. Tomcat源码分析 (六)----- Tomcat 启动过程(一)

    说到Tomcat的启动,我们都知道,我们每次需要运行tomcat/bin/startup.sh这个脚本,而这个脚本的内容到底是什么呢?我们来看看. 启动脚本 startup.sh 脚本 #!/bin/ ...

  10. 【Node.js】 bodyparser实现原理解析

    为什么我们需要body-parser 也许你第一次和bodyparser相遇是在使用Koa框架的时候.当我们尝试从一个浏览器发来的POST请求中取得请求报文实体的时候,这个时候,我们想,这个从Koa自 ...