博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2535:NOI 2010 航空管制
阅读量:6305 次
发布时间:2019-06-22

本文共 1634 字,大约阅读时间需要 5 分钟。

 

题面请点上面。

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

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

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

 

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

 

#include
#include
#include
#include
#include
#include
#include
#include
#define SIZE 1000005#define rint register intusing 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
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
=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

你可能感兴趣的文章
Android--自定义加载框
查看>>
LINUX下 lamp安装及配置
查看>>
BZOJ3105 [cqoi2013]新Nim游戏
查看>>
困惑的前置操作与后置操作
查看>>
SDNU 1269.整数序列(水题)
查看>>
BZOJ 2118 Dijkstra
查看>>
Go语言基础之结构体
查看>>
SpringCloud:Eureka Client项目搭建(Gradle项目)
查看>>
jqueryValidate
查看>>
ATL使用IE控件,并且屏蔽右键
查看>>
Jenkins
查看>>
linux下使用screen和ping命令对网络质量进行监控
查看>>
数据库设计技巧
查看>>
css定位概述
查看>>
C# 动态修改配置文件 (二)
查看>>
BOM:文档对象模型 --树模型
查看>>
我的Android进阶之旅------>WindowManager.LayoutParams介绍
查看>>
segment
查看>>
获取鼠标的原始移动值
查看>>
Linux信号 编程
查看>>