洛谷 P1954 [NOI2010]航空管制
https://www.luogu.org/problemnew/show/P1954
拓扑排序,
注意到如果正着建图("a出现早于b"=>"a向b连边"),贪心选择,可能前面某一次的选择造成后面找不出合法方案;
但是如果反过来建图,而且每一次选择当前入度为0的点中K值最大的,那么一定不会产生前面那种情况;因此用堆维护
对于第一问,直接跑一遍即可。。(而且题面还说了一定有可行解)
对于第二问,
设当前要使得now的起飞序号最小,那么就是使得在反着的图的拓扑序遍历中,now被遍历的次序尽量往后排
那么,在遍历到now时,不减小其出边指向的点的入度;不改变拓扑排序的其他流程
这样,如果什么时候堆为空了,或者堆中弹出来的那个节点已经不满足时间限制了,说明这时必须遍历now了
洛谷卡常。。。
手工定义一个pii比pair<int,int>要快200ms+。。不知道为什么(看stl源码,pair<int,int>的逻辑也是很简单的)
#pragma GCC optimize(3)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
#define fi first
#define se second
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
struct pii
{
int fi,se;
pii(){}
pii(int a,int b):fi(a),se(b){}
};
bool operator<(const pii &a,const pii &b)
{
return a.fi<b.fi||(a.fi==b.fi&&a.se<b.se);
}
struct E
{
int to,nxt;
}e[];
int f1[],ne;
int n,m,K[];
int inn[],in[],num;
vector<int> ans;
struct
{
pii d[];
int tp;
void clear(){tp=;}
void push(const pii &x)
{
d[tp++]=x;
push_heap(d,d+tp);
}
void pop() {pop_heap(d,d+tp);--tp;}
pii top() {return d[];}
bool empty(){return tp==;}
}q;
template<class T>
inline void read(T &x) {
int f=;x=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x*=;x+=(ch-'');ch=getchar();}
x*=f;
}
template<class T>
inline void write(T x) {
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}
int main()
{
int i,a,b,u,k;pii t;
read(n);read(m);
for(i=;i<=n;i++) read(K[i]);
for(i=;i<=m;i++)
{
read(a);read(b);
e[++ne].to=a;e[ne].nxt=f1[b];f1[b]=ne;
inn[a]++;
}
{
memcpy(in+,inn+,sizeof(int)*n);
for(i=;i<=n;i++)
if(!in[i])
q.push(pii(K[i],i));
while(!q.empty())
{
t=q.top();q.pop();
u=t.se;
ans.pb(u);
for(k=f1[u];k;k=e[k].nxt)
{
in[e[k].to]--;
if(!in[e[k].to])
q.push(pii(K[e[k].to],e[k].to));
}
}
for(i=ans.size()-;i>=;i--)
write(ans[i]),putchar(' ');
puts("");
}
for(int now=;now<=n;now++)
{
q.clear();
num=;
memcpy(in+,inn+,sizeof(int)*n);
for(i=;i<=n;i++)
if(!in[i])
q.push(pii(K[i],i));
while(!q.empty())
{
t=q.top();q.pop();
u=t.se;
if(n-num>K[u]) break;
if(u==now) continue;
num++;
for(k=f1[u];k;k=e[k].nxt)
{
in[e[k].to]--;
if(!in[e[k].to])
q.push(pii(K[e[k].to],e[k].to));
}
}
write(n-num);putchar(' ');
}
return ;
}
洛谷 P1954 [NOI2010]航空管制的更多相关文章
- NOI2010航空管制
2008: [Noi2010]航空管制 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 31 Solved: 0[Submit][Status] De ...
- [洛谷P2048] [NOI2010] 超级钢琴
洛谷题目链接:[NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号 ...
- [BZOJ2109][NOI2010]航空管制(贪心+拓扑)
2109: [Noi2010]Plane 航空管制 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1227 Solved: 510[Submit][ ...
- 洛谷P1447 - [NOI2010]能量采集
Portal Description 给出\(n,m(n,m\leq10^5),\)计算\[ \sum_{i=1}^n \sum_{j=1}^m (2gcd(i,j)-1)\] Solution 简单 ...
- bzoj2535 [Noi2010]航空管制
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...
- [NOI2010]航空管制(拓扑排序+贪心)
题目描述 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上,小X不幸又一 ...
- 洛谷 P2048 [NOI2010]超级钢琴 解题报告
P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为 ...
- NOI2010 航空管制
http://www.lydsy.com/JudgeOnline/problem.php?id=2535 贪心. 对于第1个问,我们先建立拓扑图,对于如果a必须在b前起飞,那么连有向边b->a, ...
- BZOJ.2109.[NOI2010]航空管制(拓扑 贪心)
题目链接 双倍经验(没有第一问) \(Description\) \(Solution\) 第一问拓扑排序即可. 第二问,即让一个元素在拓扑序中尽量靠前,好像不好做. 但是可以让一个元素出现尽量靠后. ...
随机推荐
- 卡特兰数 HDU2067 & HDU4165 & HDU1134
题目链接:https://vjudge.net/problem/HDU-2067 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limi ...
- Java NIO(一) 初步理解NIO
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. 为什么要使用 NIO? NIO ...
- html5--5-15 绘制阴影
html5--5-15 绘制阴影 实例 <!doctype html> <html> <head> <meta charset="utf-8&quo ...
- exBSGS算法
BSGS,全称\(Baby Step Giant Step\),是用于求解离散对数的一种算法. 就是用来求\(A^x \equiv B (mod\ p)\) 的x这么一种算法-- 理论知识是:在[0, ...
- codevs 3095 黑心的市长
3095 黑心的市长 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description A市有一条长Nkm的高速公路.有M个人各自想承包 ...
- bootstrap table 根据单元格中的数据改变单元格的样式
在bootstrap-table.js里面列属性 formatter就是用来格式化单元格的,其默认值是undefined 类型是function,function(value, row, index ...
- TX2 刷机过程
1.拿到板子,上电 (1)输入 ls (2)进入NVIDIA-INSTALLER/ (3)再sudo ./installer.sh 账户和密码都是:nvidia (4)sudo reboot 参考博客 ...
- DIY一个DNS查询器:程序实现
上一篇文章<DIY一个DNS查询器:了解DNS协议>中讲了DNS查询协议的原理和数据结构.经过两个星期的开发,完成了该查询器的编写.期间也遇到了一些问题,如: 1资源记录(Resource ...
- tomcat 的一些知识
常见web服务器 1. WebLogic 支持J2EE规范2. WebSphere 支持J2EE3. Tomcat 支持JSP,servlet规范 需要配置JDK才能运行 tomcat JAVA_HO ...
- UTC与本地时间字符串互相转换
#!/usr/bin/env python import time import datetime # 格式自改 UTC_FORMAT = '%Y-%m-%dT%H:%M:%SZ' LOCAL_FOR ...