【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. javaweb(三十八)——mysql事务和锁InnoDB(扩展)

    MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备就My ...

  2. (转载)C#提取汉字拼音首字母的方法

    今天突然要用到提取汉字拼音首字母的功能,去网上找了找,发现没有几个好用的,决定自己写一个,效果还不错,发出来大家一起研究下,分享给大家!直接入主题: 1.首先对编码进行定义 #region 编码定义 ...

  3. vue-cli的安装使用

    通过 npm install vue 安装vue 后: 1.打开cmd 输入 npm install --global vue-cli 全局安装vue-cli脚手架 输入 vue -V 返回vue-c ...

  4. Android错误:can not get file data of lua/start_v2.op [LUA ERROR] [string "require "lua/start_v2””] 已解决

    错误: can not get file data of lua/start_v2.op [LUA ERROR] [string "require "lua/start_v2””] ...

  5. Cuteftp连接虚拟机Centos7

    使用Centos7虚拟机时,想要从主机传一些文件到虚拟机,需要使用FTP传输,在主机上装上的CuteFTP的软件,对虚拟机进行配置. 1,首先,要保证虚拟机能够上网 一般装好虚拟机后,只要主机连了网, ...

  6. 洛谷【P1052】过河

    https://www.luogu.org/problemnew/show/P1052 题目描述 在河上有一座长度为 L 的独木桥, 一只青蛙想沿着独木桥从河的一侧跳到另一侧. 在桥上有一些石子, 青 ...

  7. 基于Docker Compose构建的MySQL MHA集群

    Docker MySQL MHA 基于Docker 1.13.1之上构建的MySQL MHA Docker Compose Project 可快速启动GTID模式下的MasterHA集群, 主用于My ...

  8. spring mvc ajaxfileupload文件上传返回json下载问题

    问题:使用spring mvc ajaxfileupload 文件上传在ie8下会提示json下载问题 解决方案如下: 服务器代码: @RequestMapping(value = "/ad ...

  9. KETTLE监控

    kettle单实例环境下自身没有监控工具,但在集群下自带了监控工具. 一.集群自带的监控 kettle自带的集群监控工具可以监控转换的执行情况. 配置好集群后,打开浏览器:输入http://local ...

  10. hbase 修复 hbck

    hbase 修复使用hbck 新版本的 hbck 可以修复各种错误,修复选项是: (1)-fix,向下兼容用,被-fixAssignments替代 (2)-fixAssignments,用于修复reg ...