【BZOJ2109/2535】【NOI2010】航空管制(贪心)
【BZOJ2109/2535】【NOI2010】航空管制(贪心)
题面
题解
很好玩的一道题目
先看第一问,显然是要找一个合法的拓扑排序的序列。
直接拓扑排序,把队列变成堆?发现这样子不能保证满足时间的限制。
因为这样子有后效性,你永远不知道把这个点给选走之后,它后面的点的限制。
所以我们连反边,每次选择时间限制最靠后的那个,这样子就可以保证时间靠前的尽可能在前面
(是不是蜜汁像\(HNOI2015\)菜肴制作)
因为保证有解,所以这样子做出来的一定是合法解。
考虑第二问,我们显然还是要时间靠前的尽可能靠前。
现在又加上一条限制,要保证某个点的时间尽可能靠前。
这个也不难办,我们枚举当前在计算哪个点的答案。
同样进行反图上的拓扑排序,强行限制当前这个点不选。
当没有点可以选了,或者某个点选出来的时间已经不合法了。
那么这个时候就是必须选这个点的最晚时间。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define sd(u) (u.second)
#define fr(u) (u.first)
#define MAX 2222
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
struct Line{int v,next;}e[MAX<<3];
int h[MAX],cnt=1,deg[MAX];
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
int n,m,ans[MAX],K[MAX];
void CalcDeg()
{
memset(deg,0,sizeof(deg));
for(int i=1;i<cnt;++i)deg[e[i].v]++;
}
priority_queue<pair<int,int> > Q;
void Solve1()
{
CalcDeg();
for(int i=1;i<=n;++i)if(!deg[i])Q.push(make_pair(K[i],i));
int tot=0;pair<int,int> u;
while(!Q.empty())
{
u=Q.top();Q.pop();ans[++tot]=u.second;
for(int i=h[sd(u)];i;i=e[i].next)
if(!--deg[e[i].v])Q.push(make_pair(K[e[i].v],e[i].v));
}
while(tot)printf("%d ",ans[tot--]);puts("");
}
int Solve2(int x)
{
CalcDeg();while(!Q.empty())Q.pop();
for(int i=1;i<=n;++i)if(!deg[i]&&i!=x)Q.push(make_pair(K[i],i));
int tot=n;pair<int,int> u;
while(!Q.empty())
{
u=Q.top();Q.pop();
if(fr(u)<tot)break;
for(int i=h[sd(u)];i;i=e[i].next)
if(!--deg[e[i].v]&&e[i].v!=x)Q.push(make_pair(K[e[i].v],e[i].v));
--tot;
}
return tot;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i)K[i]=read();
for(int i=1,u,v;i<=m;++i)u=read(),v=read(),Add(v,u);
Solve1();
for(int i=1;i<=n;++i)printf("%d ",Solve2(i));
}
【BZOJ2109/2535】【NOI2010】航空管制(贪心)的更多相关文章
- [BZOJ2109][NOI2010]航空管制(贪心+拓扑)
2109: [Noi2010]Plane 航空管制 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1227 Solved: 510[Submit][ ...
- NOI2010航空管制
2008: [Noi2010]航空管制 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 31 Solved: 0[Submit][Status] De ...
- [NOI2010]航空管制(拓扑排序+贪心)
题目描述 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小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 2535 & bzoj 2109 航空管制 —— 贪心+拓扑序
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...
- BZOJ.2109.[NOI2010]航空管制(拓扑 贪心)
题目链接 双倍经验(没有第一问) \(Description\) \(Solution\) 第一问拓扑排序即可. 第二问,即让一个元素在拓扑序中尽量靠前,好像不好做. 但是可以让一个元素出现尽量靠后. ...
- NOI2010 航空管制
http://www.lydsy.com/JudgeOnline/problem.php?id=2535 贪心. 对于第1个问,我们先建立拓扑图,对于如果a必须在b前起飞,那么连有向边b->a, ...
- BZOJ 2535 Plane 航空管制2
http://www.lydsy.com/JudgeOnline/problem.php?id=2535 思路:对于1,我们只需要每个点比前驱大就可以了,然后满足尽量优. 对于第二问,我们先求出这个点 ...
- 洛谷 P1954 [NOI2010]航空管制
https://www.luogu.org/problemnew/show/P1954 拓扑排序, 注意到如果正着建图("a出现早于b"=>"a向b连边" ...
随机推荐
- 【替罪羊树】bzoj3224&luogu3369&cogs1829 [Tyvj 1728]普通平衡树
[替罪羊树]bzoj3224&luogu3369&cogs1829 [Tyvj 1728]普通平衡树 bzoj 洛谷 cogs 先长点芝士 替罪羊树也是一种很好写的平衡树qwq..替罪 ...
- javaweb(三十三)——使用JDBC对数据库进行CRUD
一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...
- XAF-如何在详细视图界面显示按钮(含示例项目下载)
默认情况下,指定了按钮的Category后,将在对应的按钮容器显示按钮.有时候,我们需要将按钮显示在详细视图中. 本示例源码 创建一个控制器,并填加按钮.设置好了所有ID.Caption后,给Cate ...
- Intellij IDEA破解激活
本文使用破解补丁激活Intellij IDEA 第一步:下载破解补丁(http://idea.lanyus.com/) 第二步:将下载好的补丁放置磁盘的任意位置,下面是我放置的位置 第三步:打开Int ...
- LeeCode_01_Two sum
Two Sum Given an array of integers, return indices of the two numbers such that they add up to a spe ...
- HDU-6315:Naive Operations(线段树+思维)
链接:HDU-6315:Naive Operations 题意: In a galaxy far, far away, there are two integer sequence a and b o ...
- 4星|《财经》2018年第15期:电动飞机、无人小飞机、AI无人机
<财经>2018年第15期 总第532期 旬刊 本期主题是AI.有多篇国内AI行业的比较深入的调查报告,比较有意思的有:电动飞机.无人小飞机.AI无人机.欧盟通用数据保护条例.Amazon ...
- [linux] vim在源代码中自动添加作者信息(转载)
原文出处: http://www.vimer.cn/2009/10/用vim在源代码中添加你的个人信息.html vim ~/.vimrc "进行版权声明的设置 "添加或更新头 m ...
- 几个好用的php函数
几个好用的php函数 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. function enc ...
- Scrum立会报告+燃尽图(十月十九日总第十次):
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...