题目传送门

题解:

如果正着连边,可以发现最困难的点是ti不好处理。

所以我们连反边,然后将ti转换成前面有n-ti+1架飞机起飞了作为限制条件。

对于第一问,直接toposort 然后反着输出求出的结果。

对于第二问,我们则枚举每个架飞机,然后在toposort的时候不把这个点入队,直到队列为空的时候,这个时候就是这架飞机的最早起飞时间了。

代码:

/*
code by: zstu wxk
time: 2019/02/22
*/
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const int _inf = 0xc0c0c0c0;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL _INF = 0xc0c0c0c0c0c0c0c0;
const LL mod =  (int)1e9+7;
const int N = 1e5 + 100;
int n, m;
vector<int> vc[N];
vector<int> e[N];
int ind[N], vis[N], t[N], ans[N];
void init(){for(int i = 1; i <= n; ++i) ind[i] = vis[i] = 0;for(int i = 1; i <= n; ++i){for(int j = 0; j < e[i].size(); ++j){int v = e[i][j];++ind[v];}}
}
int toposort(int ban){queue<int> q;for(int j = 0; j < vc[n].size(); ++j){int v = vc[n][j];if(!ind[v] && v != ban){q.push(v);vis[v] = 1;}}for(int k = n; k >= 1; --k){if(q.empty()) return k;int x = q.front();q.pop();ans[k] = x;for(int j = 0; j < e[x].size(); ++j){int v = e[x][j];if(v == ban) continue;ind[v]--;if(ind[v] == 0 && t[v] >= k && !vis[v]){vis[v] = 1;q.push(v);}}for(int j = 0; j < vc[k-1].size(); ++j){int v = vc[k-1][j];if(v == ban) continue;if(!vis[v] && ind[v] == 0){q.push(v);vis[v] = 1;}}}return 1;
}
void Ac(){for(int i = 1; i <= n; ++i){scanf("%d", &t[i]);vc[t[i]].pb(i);}for(int i = 1,u,v; i <= m; ++i){scanf("%d%d", &u, &v);e[v].pb(u);}init();toposort(0);for(int i = 1; i <= n; ++i){printf("%d%c", ans[i], " \n"[i==n]);}for(int i = 1; i <= n; ++i){init();printf("%d%c", toposort(i), " \n"[i==n]);}
}
int main(){while(~scanf("%d%d", &n, &m)){Ac();}return 0;
}
/*
5 5
4 5 2 5 4
1 2
3 2
5 1
3 4
3 1*/

View Code

转载于:https://www.cnblogs.com/MingSD/p/10419339.html

BZOJ-2535 航空管制 toposort相关推荐

  1. BZOJ 2535:NOI 2010 航空管制

    [NOI2010]航空管制 题面请点上面. 首先第一问,我第一想法是把它放到一个小根堆中,然而这是不行的. 正确的思路是,把图反过来建,然后放到一个大根堆里去. 至于原因,感性理解一下,正着贪是有后效 ...

  2. bzoj 2109: [Noi2010]Plane 航空管制

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

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

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

  4. bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】

    有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a->b c->d,ka=4,kb=2,kc=3,k ...

  5. bzoj 2109 amp; 2535 空中管制 解读

    [] [分析]小猪真的是一个很好的问题.我认为这是一个问题洪水.建立拓扑后(便! ).直接把最外层设定序号为1,第二层为2.bfs下去就可以. . . 结果发现:飞行序号不能同样.. . 于是開始想. ...

  6. BZOJ2535: [Noi2010]Plane 航空管制2

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2535 把图反向,拓扑排序一下,用并查集维护当前权值能放置的最大位置.对于第二问,就相当于我把点 ...

  7. BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】

    题目链接 BZOJ2535 题解 航班之间的关系形成了一个拓扑图 而且航班若要合法,应尽量早出发 所以我们逆拓扑序选点,能在后面出发的尽量后面出发,不会使其它点变得更劣,容易知是正确的 第二问只需枚举 ...

  8. BZOJ2535: [Noi2010]Plane 航空管制2(拓扑排序 贪心)

    题意 题目链接 Sol 非常妙的一道题. 首先不难想到拓扑排序,但是直接对原图按\(k\)从小到大拓扑排序是错的.因为当前的\(k\)大并不意味着后面的点\(k\)也大 但是在反图上按\(k\)从大到 ...

  9. [Luogu P2447] [BZOJ 1923] [SDOI2010]外星千足虫

    洛谷传送门 BZOJ传送门 航空航天局(NASA)研制发射,行经火星.金星.土卫六.木卫二.谷神星."张衡星"等232323颗太阳系星球,并最终在小行星"杰森星" ...

最新文章

  1. 内核层CS段描述符信息
  2. CRF++命名实体识别(NER)初步试探
  3. document.execCommand()函数可用参数解析 (转)
  4. django2连接mysql_Django2.2连接MySQL问题解决
  5. mac php gd(mac osx 10.9.4)
  6. 变量存储list python_Python变量类型(八)
  7. MySQL 5.7安装(多实例)最佳实践
  8. java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示
  9. c51为啥要宏定义时钟_c51时钟
  10. 新浪视频播放器站外调用代码
  11. 未来教育 计算机四级题库,未来教育计算机等级考试四级数据库工程师题库.docx...
  12. 全球与中国医疗AR VR市场深度研究分析报告
  13. codeforces1296F Berland Beauty
  14. 解析人工智能与人类智慧的求同存异
  15. 国家统计局举办开放日 称将迎接“大数据”挑战
  16. 写javaEE初学者的我
  17. 0FFICE2007 EXCEL跨工作簿引用的缺点
  18. TP Link WN726N ubuntu18安装成功
  19. Spring启动过程详解
  20. section 5: 字体

热门文章

  1. python string与list互转
  2. attr和prop区别
  3. 向量叉乘判断两向量之间是顺时针还是逆时针
  4. 【leetcode】Integer to Roman
  5. PDF N-Up Maker:一个把PDF转成小册子或者把多个页面放到一个页面上的工具(免费,免Acrobat,命令行模式)...
  6. linux开启ssh服务,实现ssh远程登录
  7. linux ns级定时器_预热 | 万众期待的单片机、Linux二合一的STM32MP157开发板亮相
  8. android 自定义属性 双向绑定,如何解决:“在使用自定义视图实现双向数据绑定时,找不到属性’android:text’”的getter?...
  9. 小程序iconfont报错_【经验】开发微信小程序经验总结
  10. SpringCloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine