[NOI2010]航空管制

题面请点上面。

首先第一问,我第一想法是把它放到一个小根堆中,然而这是不行的。

正确的思路是,把图反过来建,然后放到一个大根堆里去。

至于原因,感性理解一下,正着贪是有后效性,会陷入到局部最优解,而反着贪则是从终点出发,是正确的。

第二问也不难,我们考虑当前这个点,能不动他就不动,直到不动不行了(此时两种情况,一是堆空了,二是有人起飞时间晚于降落时间),此时就是第二问的答案。

#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=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';return x*f;
}
inline void write(int x)
{if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10+'0');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=1;i<=n;++i) in[i]=ru[i];for(rint i=1;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=1;i<=n;++i) in[i]=ru[i];for(rint i=1;i<=n;++i) if(!in[i] && i!=k)q.push((node){i,v[i]});for(rint c=n;c>=1;--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=1;i<=n;++i) v[i]=read();for(rint i=1;i<=m;++i){int x=read(),y=read();link(y,x);++ru[x];}solve1(); for(rint i=cnt;i>=1;--i) write(ans[i]),cout<<" ";puts("");for(rint i=1;i<=n;++i) write(solve2(i)),cout<<" "; return 0;
}

View Code

转载于:https://www.cnblogs.com/mxrmxr/p/10349395.html

BZOJ 2535:NOI 2010 航空管制相关推荐

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

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

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

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

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

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

  4. NOI 2010 能量采集

    题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共 ...

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

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

  6. BZOJ 4197 NOI 2015 寿司晚宴

    题面 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 ...

  7. [bzoj 4199][NOI 2015]品酒大会

    传送门 Description 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发"首席品 酒家"和"首席猎 ...

  8. BZOJ 2436 NOI嘉年华(单调优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...

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

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

最新文章

  1. vue 带全选和多选的表格怎么写_vue实现下拉列表多选全选以及模糊查询的vue组件...
  2. on 和where条件的放置详解
  3. TF:利用TF读取数据操作,将CIFAR-10 数据集中的训练图片读取出来,并保存为.jpg格式
  4. python自动化接口测试excel用例串行之行_python 读取 Excel 自动化执行测试用例
  5. 小评几种O/R Mapping工具
  6. 电商无线端秋季促销PSD分层海报,大战之前设计师准备好了么?
  7. 测试oracle的存储过程,测试技能:在oracle中自用存储过程进行测试数据构造
  8. window.showModalDialog用法
  9. python turtle代码示例-Python turtle.left方法代码示例
  10. android NDK如何解决Please define the NDK_PROJECT_PATH variable to point to it
  11. centos编译安装vim7.4
  12. iOS遇到问题小总结
  13. 好玩好用软件推荐,让你大开眼界
  14. ros系列—解决文件改名导致节点无法启动问题及ros::NodeHandle nh与nh(“~“)的理解
  15. Python爬虫爬取B站封面图片,这才是我们学好爬虫的动力!
  16. 安卓手机怎么运行java?如何在Android手机上运行jAVA程序?
  17. java 两张图片叠加合并
  18. c语言中地址值是什么意思,单片机C语言中如何区别是地址还是数值啊?
  19. A - DZY Loves Sequences
  20. 光伏开启全面洗牌模式 逆变器进入寡头时代

热门文章

  1. Android分享功能
  2. 【Java源码分析】LinkedHashSet和HashSet源码分析
  3. 【剑指offer-Java版】05从尾到头打印链表
  4. python代码转换为pytorch_python、PyTorch图像读取与numpy转换
  5. 组件化开发和模块化开发概念辨析
  6. 蓝牙 GATT 协议
  7. RxSwift ViewModel定义
  8. Recyclerview设置间距
  9. group by的查询
  10. jenkins如何实现重新发布历史构建记录里的版本