【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. 【JUC源码解析】ConcurrentSkipListMap

    简介 基于跳表,支持并发,有序的哈希表. 跳表 红色路径为寻找结点F. 拿空间换时间,时间复杂度,O(nlogn). 源码分析 内部类 Node 属性 final K key; // 键 volati ...

  2. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

  3. windows下Mysql安装启动及常用操作

    1.下载mysql https://dev.mysql.com/downloads/ 2.配置环境变量 变量名:MYSQL_HOME 变量值:E:\MySql\mysql-8.0.15-winx64\ ...

  4. Siki_Unity_2-7_Stealth秘密行动

    Unity 2-7 Stealth秘密行动 Abstract:向量运算:Animation动画:Navigation寻路系统:Mecanim动画系统 任务1&2&3:游戏介绍 & ...

  5. django中model字段与属性

    model field 类型1.AutoField     一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key. 2.BigIntege ...

  6. 使用Idea工具创建Maven WebApp项目

    (1)New Project,选择模板,配置SDK (2)配置项目名及项目组名 GroupID是项目组织唯一的标识符, 比如我的项目叫test001 那么GroupID应该是 com.lixiaomi ...

  7. 面向对象编程(OOP)思想小结

    Concepts 类(class):对我们要解决问题的抽象,比如建造房子的蓝图:但实现机制上来讲,类是根据蓝图构建而成的,存储在内存中的,用来表示对象的数据. 对象(object):根据类构建的实体, ...

  8. 在Emacs 23里字体的调整(转自ChinaUnix.net)

    首先,在Emacs中,通过菜单Options --> Set Default Font,设置好你喜欢的字体. 然后,把光标放到你所在的字体上,用命令M-x describe-font来查看你当前 ...

  9. 九个很有用的php功能

    1. 函数的任意数目的参数 你可能知道PHP允许你定义一个默认参数的函数.但你可能并不知道PHP还允许你定义一个完全任意的参数的函数 下面是一个示例向你展示了默认参数的函数: 1 2 3 4 5 6 ...

  10. 作业 20181120-3 Beta发布

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2408 小组介绍 组长:付佳 组员:张俊余 李文涛 孙赛佳 田良 于洋 段 ...