【BZOJ2109/2535】【NOI2010】航空管制(贪心)

题面

BZOJ2109

BZOJ2535

题解

很好玩的一道题目

先看第一问,显然是要找一个合法的拓扑排序的序列。

直接拓扑排序,把队列变成堆?发现这样子不能保证满足时间的限制。

因为这样子有后效性,你永远不知道把这个点给选走之后,它后面的点的限制。

所以我们连反边,每次选择时间限制最靠后的那个,这样子就可以保证时间靠前的尽可能在前面

(是不是蜜汁像\(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】航空管制(贪心)的更多相关文章

  1. [BZOJ2109][NOI2010]航空管制(贪心+拓扑)

    2109: [Noi2010]Plane 航空管制 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1227  Solved: 510[Submit][ ...

  2. NOI2010航空管制

    2008: [Noi2010]航空管制 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 31  Solved: 0[Submit][Status] De ...

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

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

  4. bzoj2535 [Noi2010]航空管制

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

  5. bzoj 2535 && bzoj 2109 [Noi2010]Plane 航空管制——贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...

  6. bzoj 2535 & bzoj 2109 航空管制 —— 贪心+拓扑序

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...

  7. BZOJ.2109.[NOI2010]航空管制(拓扑 贪心)

    题目链接 双倍经验(没有第一问) \(Description\) \(Solution\) 第一问拓扑排序即可. 第二问,即让一个元素在拓扑序中尽量靠前,好像不好做. 但是可以让一个元素出现尽量靠后. ...

  8. NOI2010 航空管制

    http://www.lydsy.com/JudgeOnline/problem.php?id=2535 贪心. 对于第1个问,我们先建立拓扑图,对于如果a必须在b前起飞,那么连有向边b->a, ...

  9. BZOJ 2535 Plane 航空管制2

    http://www.lydsy.com/JudgeOnline/problem.php?id=2535 思路:对于1,我们只需要每个点比前驱大就可以了,然后满足尽量优. 对于第二问,我们先求出这个点 ...

  10. 洛谷 P1954 [NOI2010]航空管制

    https://www.luogu.org/problemnew/show/P1954 拓扑排序, 注意到如果正着建图("a出现早于b"=>"a向b连边" ...

随机推荐

  1. Intellij IDEA 2017 通过scala工程运行wordcount

    首先是安装scala插件,可以通过idea内置的自动安装方式进行,也可以手动下载可用的插件包之后再通过idea导入. scala插件安装完成之后,新建scala项目,右侧使用默认的sbt 点击Next ...

  2. Struts 2(二):使用Struts2

    本文简单描述如何在Eclipse中使用使用Struts2,并介绍一下Struts2的配置文件 注:Struts2默认需要Java 5.0及其以上版本的运行环境支持,Web容器需要支持Servlet 2 ...

  3. DOM练手讲解

    先上代码,大家贴入看一下 <body> <select id="slc" size="7"></select> <in ...

  4. 强化学习读书笔记 - 11 - off-policy的近似方法

    强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...

  5. hdu1042 N!(大数求阶乘)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submi ...

  6. selenium自动化之稳定版本环境介绍

    大家都知道,目前selenium版本已经升级到3.0了,selenium3只是在selenium2的基础上做了一些调整,最明显的区别就是 selenium2对Firefox的支持最高只支持46及以下版 ...

  7. python 的入门

    时光匆匆,大一的时间过的很快,从大一上学期学的c开始,就感觉出c的结构很复杂,但是不可否认,学习c和汇编等涉及到系统底层知识才会有可能开发出属于自己知识产权的东西,然而,python以其简约性,丰富的 ...

  8. ES6的新特性(6)——正则的扩展

    正则的扩展 RegExp 构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = ne ...

  9. 2016-6-2-第二个sprint

    1.开始一个新的冲刺: 起止:2016.6.1~2016.6.14 ProductBacklog:继续向下细化 Sprint 计划会议:确定此次冲刺要完成的目标 Sprint Backlog:新的冲刺 ...

  10. Alpha发布——视频博客

    1.视频链接 视频上传至优酷自频道,地址链接:https://v.youku.com/v_show/id_XMzg5MzQ4MzM2MA==.html?spm=a2h0k.11417342.sores ...