BZOJ.2109.[NOI2010]航空管制(拓扑 贪心)
\(Description\)
\(Solution\)
第一问拓扑排序即可。
第二问,即让一个元素在拓扑序中尽量靠前,好像不好做。
但是可以让一个元素出现尽量靠后。给它分配一个小的权值,把队列换成优先队列即可(优先弹同一层但是权值大的)。
这题可以直接判队列为空时(或者当前最晚的飞机已晚于当前时间),令它此时起飞。
所以我们建反图,跑\(n\)次拓扑排序即可。(第一问直接用反图求拓扑序就行)
复杂度\(O(nm\log n)\)。
这样用堆做虽然能过 但还是有些暴力。。我们按时间排序,模拟一波即可。就不写了。
//952kb 2796ms
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
#define mp std::make_pair
#define pr std::pair<int,int>
typedef long long LL;
const int N=2005,M=1e4+5;
int n,tm[N],Enum,H[N],nxt[M],to[M],indgr[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AE(int u,int v)
{
++indgr[v], to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
}
void Solve1()
{
static int dgr[N],ans[N];
std::priority_queue<pr> q;
memcpy(dgr,indgr,sizeof dgr);
for(int i=1; i<=n; ++i) if(!dgr[i]) q.push(mp(tm[i],i));
for(int t=n,x; t; --t)
{
ans[t]=x=q.top().second, q.pop();
for(int i=H[x]; i; i=nxt[i])
if(!--dgr[to[i]]) q.push(mp(tm[to[i]],to[i]));
}
for(int i=1; i<=n; ++i) printf("%d ",ans[i]);
putchar('\n');
}
int Solve2(int s)
{
static int dgr[N];
std::priority_queue<pr> q;
memcpy(dgr,indgr,sizeof dgr);
for(int i=1; i<=n; ++i) if(!dgr[i]&&i!=s) q.push(mp(tm[i],i));
for(int t=n,x; t; --t)
{
if(q.empty()) return t;
x=q.top().second, q.pop();
if(t>tm[x]) return t;//既然有解那就能保证这样也有解啊 不满足就return了。
for(int i=H[x]; i; i=nxt[i])
if(to[i]!=s && !--dgr[to[i]]) q.push(mp(tm[to[i]],to[i]));
}
return 1;
}
int main()
{
n=read(); int m=read();
for(int i=1; i<=n; ++i) tm[i]=read();
while(m--) AE(read(),read());
Solve1();
for(int i=1; i<=n; ++i) printf("%d ",Solve2(i));
return 0;
}
BZOJ.2109.[NOI2010]航空管制(拓扑 贪心)的更多相关文章
- [NOI2010]航空管制(拓扑排序+贪心)
题目描述 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上,小X不幸又一 ...
- 【BZOJ2109/2535】【NOI2010】航空管制(贪心)
[BZOJ2109/2535][NOI2010]航空管制(贪心) 题面 BZOJ2109 BZOJ2535 题解 很好玩的一道题目 先看第一问,显然是要找一个合法的拓扑排序的序列. 直接拓扑排序,把队 ...
- NOI2010航空管制
2008: [Noi2010]航空管制 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 31 Solved: 0[Submit][Status] De ...
- [BZOJ2109][NOI2010]航空管制(贪心+拓扑)
2109: [Noi2010]Plane 航空管制 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1227 Solved: 510[Submit][ ...
- bzoj 2109: [Noi2010]Plane 航空管制
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频 发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此, 小X表示很不满意. 在这次来烟台的 ...
- bzoj2535 [Noi2010]航空管制
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 2109 航空管制(拓扑排序+贪心)
绝世好题啊.. 题意:给出一个DAG,和每个点要求出现在这个DAG里面的拓扑排序的位置<=ti,求出所有可能的拓扑排序里面每个点出现的位置的最小值. 正着做不好做,考虑反着做,建立这个图的反图. ...
- BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】
题目链接 BZOJ2535 题解 航班之间的关系形成了一个拓扑图 而且航班若要合法,应尽量早出发 所以我们逆拓扑序选点,能在后面出发的尽量后面出发,不会使其它点变得更劣,容易知是正确的 第二问只需枚举 ...
随机推荐
- ubuntu14.04 放开串口权限
可以用如下命令查看串口信息: ls -l /dev/ttyUSB*来查看相关的信息. 但是普通用户没有usb操作权限(函数open()打不开串口:refused),如果我们想在ROS程序里面打开串口, ...
- 【干货】从windows注册表读取重要信息-----这种技能非常重要,占电子取证的70%
也就是说,当我拿着U盘启动盘,从你电脑里面拷贝了注册表的几个文件,大部分数据就已经到我手中了.一起来感受一下吧. 来源:Unit 6: Windows File Systems and Registr ...
- gdb 调试入门,大牛写的高质量指南
引用自:http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU 调 ...
- 一个优秀的 ring buffer 或 cycle buffer 的实现代码
#define CIRCLE_BUFFSIZE 1024 * 1024#define min(x, y) ((x) < (y) ? (x) : (y)) struct cycle_buffer ...
- linux 查看用户上次修改密码的日期【转】
1.找到以下文件: cat /etc/shadow 第三段字符就是最近一次密码修改的天数,此数字是距离1970年1月1日的天数. 2.用以下命令计算: date -u -d "1970- ...
- html5 postMessage解决跨域、跨窗口消息传递(转)
仅做学习使用,原文链接:http://www.cnblogs.com/dolphinX/p/3464056.html 一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经 ...
- igmpproxy启动时错误:There must be at least 2 Vif's where one is upstream.
openwrt 下启动igmpproxy时报错 # /etc/init.d/igmpproxy start Not starting instance igmpproxy::instance1, an ...
- 创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录
yum服务器lvm扩容,data目录是yum存放rpm包的目录,只有20G,需要添加磁盘扩容到80G # df -lh Filesystem Size Used Av ...
- Ex 6_17 数量无限的硬币兑换问题_第七次作业
子问题定义:定义一个数组b,大小比兑换价格的大小多一个元素,其中b[i]表示是否能用面值为x1,x2,x3,..,xn的硬币兑换价格i. 递归关系: 初值设定:设b[0]=true 求解顺序:按下标从 ...
- Java验证码
下面这段代码可用于Jsp+Servle+JavaBean中做验证码: <%@ page contentType="image/jpeg" import="java. ...