#贪心,二叉堆#洛谷 1954 [NOI2010] 航空管制
分析
首先考虑可行方案,很容易想到拓扑排序,
但是如果建正图第一类的限制有可能不能满足,
考虑第一类限制其实时间倒流就是在 \(T\) 时刻之后才能选它。
那么直接建反图然后 \(a_i\) 大的优先选,可以用二叉堆来维护。
考虑最早起飞时间那么将反图中这个点的后继全部提出来(正过来看就是这些点是它的祖先)
那么其它点由于满足了第一类限制所以顺序可以固定,然后将这些后继包括本身依次合法插入即可
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <queue>
using namespace std;
const int N=2011; priority_queue<pair<int,int> >q;
struct node{int y,next;}e[N*5];
int v[N],st[N],n,m,b[N],as[N],a[N],mn[N],ans,tot,upd,deg[N];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
void dfs(int x){
v[x]=upd;
for (int i=as[x];i;i=e[i].next)
if (v[e[i].y]!=upd) dfs(e[i].y);
}
int main(){
n=iut(),m=iut();
for (int i=1;i<=n;++i) a[i]=iut();
for (int i=1;i<=m;++i){
int y=iut(),x=iut();
e[i]=(node){y,as[x]},as[x]=i,++deg[y];
}
for (int i=1;i<=n;++i)
if (!deg[i]) q.push(make_pair(a[i],i));
while (!q.empty()){
int x=q.top().second; st[++st[0]]=x; q.pop();
for (int i=as[x];i;i=e[i].next)
if (!(--deg[e[i].y])) q.push(make_pair(a[e[i].y],e[i].y));
}
reverse(st+1,st+1+n);
for (int i=1;i<=n;++i) print(st[i]),putchar(i==n?10:32);
for (int i=1;i<=n;++i){
tot=0,ans=1,++upd,dfs(i);
for (int j=1;j<=n;++j)
if (v[st[j]]!=upd) b[++tot]=st[j];
mn[tot+1]=0x3f3f3f3f;
for (int j=tot;j;--j)
mn[j]=min(mn[j+1],a[b[j]]-j);
for (int j=1;j<=n-tot;++j)
for (;ans<=tot&&mn[ans]<j;++ans);
print(ans+n-tot-1),putchar(i==n?10:32);
}
return 0;
}
#贪心,二叉堆#洛谷 1954 [NOI2010] 航空管制的更多相关文章
- 洛谷 P1954 [NOI2010]航空管制
https://www.luogu.org/problemnew/show/P1954 拓扑排序, 注意到如果正着建图("a出现早于b"=>"a向b连边" ...
- BZOJ 4524(贪心+二叉堆)
题面 若一个大于 11 的整数 M的质因数分解有 k 项,其最大的质因子为 \(a_k\),并且满足 \({a_k}^k \leq N,k<128\),我们就称整数 M 为 N-伪光滑数. 现在 ...
- 洛谷P2827 [NOIP2016 提高组] 蚯蚓 (二叉堆/队列)
容易想到的是用二叉堆来解决,切断一条蚯蚓,其他的都要加上一个值,不妨用一个表示偏移量的delta. 1.取出最大的x,x+=delta: 2.算出切断后的两个新长度,都减去delta和q: 3.del ...
- 2021.08.01 P4359 伪光滑数(二叉堆)
2021.08.01 P4359 伪光滑数(二叉堆) [P4359 CQOI2016]伪光滑数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 若一个大于 11 的整数 MM ...
- 最短路径——Dijkstra算法以及二叉堆优化(含证明)
一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...
- AC日记——二叉堆练习3 codevs 3110
3110 二叉堆练习3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给定N(N≤500,000)和N个整 ...
- codevs 3110 二叉堆练习3
3110 二叉堆练习3 http://codevs.cn/problem/3110/ 题目描述 Description 给定N(N≤500,000)和N个整数(较有序),将其排序后输出. 输入描述 I ...
- 数据结构图文解析之:二叉堆详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆
考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...
- 二叉堆(一)之 图文解析 和 C语言的实现
概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...
随机推荐
- golang常用库包:redis操作库go-redis使用(02)-Redis5种基本数据类型操作
第一篇:go-redis使用,介绍Redis基本数据结构和其他特性,以及 go-redis 连接到Redis https://www.cnblogs.com/jiujuan/p/17207166.ht ...
- timeit测试函数执行时间
def list_append(): l = [] for i in range(5000): l.append(i) def list_insert(): l = [] for i in range ...
- 【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)
包含min函数的栈 https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof/ 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元 ...
- picgo如何设置又拍云图床
1. 打开又拍云官网.正常注册,并且实名认证. 2. 选择产品,然后选择云存储,激活后进入控制台. 3. 创建云存储服务.注意服务名称.后续会用到 4. 新建一个操作员,并且给权限全部打勾. 添加好操 ...
- 领略一下swift函数派发机制流程
函数派发 Swift中函数的派发机制有三种:静态派发,函数表派发,消息派发. 静态派发 静态派发是指在运行时不需要查表,直接跳转到方法进行执行.静态派发的性能也是最高的.c语言采用的是直接派发. 函数 ...
- 【Azure 云服务】Cloud Service Worker Role Workerrole突然停机,查看Events发现 Defrag Error (0x8900002D)
问题描述 Cloud Service Worker Role Workerrole突然停机,查看Events,发现是错误源为 Defrag. 错误消息: The volume Windows was ...
- Redis基础_五大数据类型和常用命令
## 1. Redis基本介绍 1.1 传统数据存储出现的问题 海量用户 高并发 罪魁祸首--关系型数据库: 性能瓶颈:磁盘IO性能低下 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群 解决思路 ...
- Temporary notepad
20230412 快速帮助手册 很牛的风格 https://devhints.io/vue 印记中国 https://docschina.org/ 前台本地存储数据 兼容 https://github ...
- InputRegZen.vue 正则Input 限制输入框输入内容
核心内容 已经 perfect,没有用外库,原生完成 用的 iview的Input组件 封装 // InputRegZen.vue <template> <div> <I ...
- Prometheus常用exporter及其常用监控指标
node-exporter常用监控指标 CPU相关指标: node_cpu_seconds_total{mode="idle"}:CPU空闲时间(秒)的总和.这是评估CPU使用率的 ...