BZOJ 2535:NOI 2010 航空管制
题面请点上面。
首先第一问,我第一想法是把它放到一个小根堆中,然而这是不行的。
正确的思路是,把图反过来建,然后放到一个大根堆里去。
至于原因,感性理解一下,正着贪是有后效性,会陷入到局部最优解,而反着贪则是从终点出发,是正确的。
第二问也不难,我们考虑当前这个点,能不动他就不动,直到不动不行了(此时两种情况,一是堆空了,二是有人起飞时间晚于降落时间),此时就是第二问的答案。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cmath>
#include<queue>
#define SIZE 1000005
#define rint register int
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-;
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
return x*f;
}
inline void write(int x)
{
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
return ;
} struct node
{
int id,v;
bool operator < (const node &x) const
{
return x.v>v;
}
};
int n,m,cnt,in[SIZE],ru[SIZE],ans[SIZE],v[SIZE];
int head[SIZE],nex[SIZE],to[SIZE],total;
priority_queue<node> q; inline void link(int x,int y)
{
to[++total]=y;
nex[total]=head[x];
head[x]=total;
return ;
} inline void solve1()
{
for(rint i=;i<=n;++i) in[i]=ru[i];
for(rint i=;i<=n;++i)
if(!in[i])
q.push((node){i,v[i]});
while(q.size())
{
int x=q.top().id;q.pop();
ans[++cnt]=x;
for(rint i=head[x];i;i=nex[i])
{
int y=to[i];--in[y];
if(!in[y]) q.push((node){y,v[y]});
}
}
} inline int solve2(int k)
{
while(q.size()) q.pop();
for(rint i=;i<=n;++i) in[i]=ru[i];
for(rint i=;i<=n;++i)
if(!in[i] && i!=k)
q.push((node){i,v[i]});
for(rint c=n;c>=;--c)
{
if(!q.size() || q.top().v<c) return c;
int x=q.top().id;q.pop();
for(rint i=head[x];i;i=nex[i])
{
int y=to[i];--in[y];
if(!in[y] && y!=k) q.push((node){y,v[y]});
}
}
} int main()
{
n=read(),m=read();
for(rint i=;i<=n;++i) v[i]=read();
for(rint i=;i<=m;++i)
{
int x=read(),y=read();
link(y,x);++ru[x];
}
solve1();
for(rint i=cnt;i>=;--i) write(ans[i]),cout<<" ";puts("");
for(rint i=;i<=n;++i) write(solve2(i)),cout<<" ";
return ;
}
BZOJ 2535:NOI 2010 航空管制的更多相关文章
- [NOI 2010]航空管制
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...
- BZOJ 2535: [Noi2010]Plane 航空管制2
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...
- 解题:NOI 2010 航空管制
题面 常见的套路与不常见的套路 第一问是常见的套路,建反边用优先队列跑拓扑排序 第二问是不常见的套路,如何判断一个点最早什么时候起飞?先不加它来拓扑排序,直到拓扑排序不能进行下去了,这个时刻就是它必须 ...
- bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】
有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a->b c->d,ka=4,kb=2,kc=3,k ...
- [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)
[BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...
- 2109&2535: [Noi2010]Plane 航空管制 - BZOJ
Description世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上, ...
- bzoj 2109: [Noi2010]Plane 航空管制
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频 发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此, 小X表示很不满意. 在这次来烟台的 ...
- bzoj 2535 && bzoj 2109 [Noi2010]Plane 航空管制——贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...
- ●BZOJ 2006 NOI 2010 超级钢琴
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2006 题解: RMQ + 优先队列 (+ 前缀) 记得在一两个月前,一次考试考了这个题目的简 ...
随机推荐
- Spring、Springboot常用注解:@Qualifier(不定时更新)
1.@Qualifier 出现场景: 老项目中有多个实现类实现同一个接口时,或者一个项目中有多个数据源时,spring容器不知道该注入哪个实现类或者使用哪个数据源,该注解就派上用场. 1)多实现类实现 ...
- MySQL Root密码丢失解决方法总结
1. 检查my.cnf,看看有没有密码......靠这也算一条啊 2. 如果能够重启,首先使用–skip-grant-tables参数重启,然后改密码,再去掉–skip-grant-tables参数重 ...
- Promethus安装指南
由于Prometheus是go语言写的,所以不需要编译,安装的过程非常简单,仅需要解压然后运行.Prometheus官方下载地址:https://prometheus.io/download/ 安装P ...
- 关于setTimeout()你所不知道的地方
前言:看了这篇文章,1.注意setTimeout引用的是全部变量还是局部变量了,当直接调用外部函数方法时,实际上函数内部的变量已经变成全 局.2.提醒我防止出错的,用匿名函数不容易出错.3.setTi ...
- jenkins-为什么要持续集成
持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础.本文论述了当前软件开发过程中存在的问题,讲解了持续集成.持续集成服务器的概念,最终探讨了为 ...
- json和jsonp的区别(转)
原文链接:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临 ...
- FreeSWITCH 使用SSL-WebSocket-WebRTC
阿里上买的域名, 申请了个免费ssl, 然后开始折腾,,,, 申请了ssl证书, 但是不提供 .pem 格式的下载(*/ω\*) 然后 把一堆 提供的 都下载下来了, 然后 又到网上 搜 crt/c ...
- js动态的给json对象添加新的元素
把{name:"xxx",age:"xxx"}变成{name:"xxx",age:"xxx",value:"x ...
- js-textarea文本换行符处理,Java后端以及js前端如何处理
方法一:后台处理 TextArea的换行符处理 TextArea文本转换为Html:写入数据库时使用 js获取了textArea的文本内容之后,器内容含有换行,空格,制表符之类的字符,但是js字符串不 ...
- C++ std::unordered_map
std::unordered_map template < class Key, // unordered_map::key_type class T, // unordered_map::ma ...