题意

题目链接

Sol

非常妙的一道题。

首先不难想到拓扑排序,但是直接对原图按\(k\)从小到大拓扑排序是错的。因为当前的\(k\)大并不意味着后面的点\(k\)也大

但是在反图上按\(k\)从大到小拓扑排序就是对的。为什么呢?因为题目中给出的条件是下限, 而在反图上拓扑排序就相当于卡着下限做,因此一定是最优的

对于第二问,同样在反图上搞。对每个点分开做,贪心的策略是:如果有其他的飞机可以起飞则让他们起飞,直到没有飞机可以起飞,这时的时间就是答案

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
using namespace std;
const int MAXN = 2e5 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, a[MAXN], inder[MAXN], tmp[MAXN], ans[MAXN];
vector<int> v[MAXN];
void Topsort() {priority_queue<Pair> q;for(int i = 1; i <= N; i++) if(!inder[i]) q.push(MP(a[i], i));int tot = 0;while(!q.empty()) {int p = q.top().se; q.pop(); ans[++tot] = p;for(int i = 0, to; i < v[p].size(); i++) {to = v[p][i];inder[to]--;if(!inder[to]) q.push(MP(a[to], to));}}for(int i = tot; i >= 1; i--) printf("%d ", ans[i]); puts("");
}
int solve(int x) {memcpy(inder, tmp, sizeof(tmp));priority_queue<Pair> q;inder[x] = N;for(int i = 1; i <= N; i++) if(!inder[i]) q.push(MP(a[i], i));int tim = N; for(int i = N; i; i--) {if(q.empty() || (q.top().fi < i)) return i;int p = q.top().se; q.pop(); for(int i = 0, to; i < v[p].size(); i++) {to = v[p][i];inder[to]--;if(!inder[to]) q.push(MP(a[to], to));}}return tim;
}
int main() {N = read(); M = read();for(int i = 1; i <= N; i++) a[i] = read();for(int i = 1; i <= M; i++) {int x = read(), y = read();v[y].push_back(x); inder[x]++; tmp[x]++;}Topsort();for(int i = 1; i <= N; i++) printf("%d ", solve(i));return 0;
}
/*
10 10
4 4 3 6 9 9 10 7 10 7
2 9
3 5
6 7
1 5
7 9
10 2
3 8
8 6
3 10
8 5*/

BZOJ2535: [Noi2010]Plane 航空管制2(拓扑排序 贪心)相关推荐

  1. BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】

    题目链接 BZOJ2535 题解 航班之间的关系形成了一个拓扑图 而且航班若要合法,应尽量早出发 所以我们逆拓扑序选点,能在后面出发的尽量后面出发,不会使其它点变得更劣,容易知是正确的 第二问只需枚举 ...

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

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2535 把图反向,拓扑排序一下,用并查集维护当前权值能放置的最大位置.对于第二问,就相当于我把点 ...

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

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

  4. bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】

    有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a->b c->d,ka=4,kb=2,kc=3,k ...

  5. [NOI2010]航空管制(拓扑排序+贪心)

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

  6. POJ3687拓扑排序+贪心

    题意:       给你n个求,他们的重量是1-n(并不是说1号求的重量是1...),然后给你m组关系a,b,表示a的重量小于b的重量,然后让你输出满足要求的前提下每个球的重量,要求字典序最小. 思路 ...

  7. BZOJ 2535:NOI 2010 航空管制

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

  8. 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序

    ->点我进原题 [Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1116 Solved: 410 Des ...

  9. 【图论】有向无环图的拓扑排序

    1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...

最新文章

  1. 数据库设计中的范式、关联与nosql分析【转】
  2. [afterCode] docker 速成班 3: 使用 container 中的功能
  3. 一次性定时事件的处理
  4. 程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26
  5. oracle常用命令收集
  6. 【模板】在build中配置resources来防止我们资源导出失败的问题
  7. 安装向导因错误而提前结束_【软件安装】SIMATIC STEP7 V5.6中文版安装教程及错误解决方法...
  8. php 删除相对应的id,PHP 在下面这个留言板代码中加入删除按钮,每一个删除按钮删除相对应一行数据,这怎么弄...
  9. String去重方法
  10. No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  11. App动态修改图标包名
  12. 服务器主机性能,服务器主机性能分析
  13. selenium鼠标操作
  14. 【高等代数】行列式的定义和性质
  15. [HNOI2003] 消防局的设立
  16. AIWIN 心电图智能诊断Baseline【线上0.719】
  17. 19【字节流、字符流】
  18. Auto.js实例找色
  19. 【前端 VUE】VUE 微信网页扫码登录(微信)
  20. JavaScript(红宝书)(二)

热门文章

  1. Head first 第一章
  2. 微软:SolarWinds 供应链攻击事件幕后黑手攻击全球24国政府
  3. 聚焦BCS|新华网:2020年北京网络安全大会开幕
  4. JAVA并发之多线程基础(4)
  5. 移动安全-iOS(三)
  6. SQL Server内存泄漏
  7. 差分约束系统 POJ 3169 Layout
  8. [20151126]IMPDP TRANSFORM参数.TXT
  9. 数学之美--关于图论引申出来的爬虫构想
  10. 程序员面试题100题第03题——求子数组的最大和