题目传送门

题解:

如果正着连边,可以发现最困难的点是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+;
const int N = 1e5 + ;
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 = ; i <= n; ++i) ind[i] = vis[i] = ;
for(int i = ; i <= n; ++i){
for(int j = ; j < e[i].size(); ++j){
int v = e[i][j];
++ind[v];
}
}
}
int toposort(int ban){
queue<int> q;
for(int j = ; j < vc[n].size(); ++j){
int v = vc[n][j];
if(!ind[v] && v != ban){
q.push(v);
vis[v] = ;
}
}
for(int k = n; k >= ; --k){
if(q.empty()) return k;
int x = q.front();
q.pop();
ans[k] = x;
for(int j = ; j < e[x].size(); ++j){
int v = e[x][j];
if(v == ban) continue;
ind[v]--;
if(ind[v] == && t[v] >= k && !vis[v]){
vis[v] = ;
q.push(v);
}
}
for(int j = ; j < vc[k-].size(); ++j){
int v = vc[k-][j];
if(v == ban) continue;
if(!vis[v] && ind[v] == ){
q.push(v);
vis[v] = ;
}
}
}
return ;
}
void Ac(){
for(int i = ; i <= n; ++i){
scanf("%d", &t[i]);
vc[t[i]].pb(i);
}
for(int i = ,u,v; i <= m; ++i){
scanf("%d%d", &u, &v);
e[v].pb(u);
}
init();
toposort();
for(int i = ; i <= n; ++i){
printf("%d%c", ans[i], " \n"[i==n]);
}
for(int i = ; i <= n; ++i){
init();
printf("%d%c", toposort(i), " \n"[i==n]);
}
}
int main(){
while(~scanf("%d%d", &n, &m)){
Ac();
}
return ;
}
/*
5 5
4 5 2 5 4
1 2
3 2
5 1
3 4
3 1 */

最新文章

  1. Android调用系统相机功能
  2. 记录一下两个比较常用的md5加密算法
  3. 控件UI性能调优 -- SizeChanged不是万能的
  4. 十个节省时间的MySQL命令
  5. 作死遇到的坑--view向下偏移
  6. WPF学习系列之六 (元素绑定)
  7. apk签名《转》
  8. 基于url的权限管理
  9. Unity3d 合作开发项目
  10. CodeForces 635C XOR Equation
  11. Android手势识别总结
  12. Bomb(hdu 3555)
  13. 22.QT-QXmlStreamReader解析,QXmlStreamWriter写入
  14. 在linux中查看进程占用的端口号
  15. online ddl与pt-osc详解
  16. Android Studio开发环境搭建和HelloWorld
  17. 黄聪:php精度计算问题
  18. mysql中binlog_format的三种模式
  19. json对象按时间排序
  20. bzoj千题计划167:bzoj3527: [Zjoi2014]力

热门文章

  1. 【iOS】Xcode 使用 CocoaPods 导入第三方库后没有提示
  2. BME200加密网关,在电力与工业应用的加密网关设计与介绍
  3. 隐马尔科夫模型HMM介绍
  4. python_Tensorflow学习(三):TensorFlow学习基础
  5. 富文本编辑器TinyMCE的使用(React Vue)
  6. Spring cloud 超时配置总结
  7. 算法与数据结构基础 - 双指针(Two Pointers)
  8. (十二)c#Winform自定义控件-分页控件
  9. 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析
  10. python3.6.6在CentOS7上的安装