BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】
生活随笔
收集整理的這篇文章主要介紹了
BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
BZOJ2535
題解
航班之間的關系形成了一個拓撲圖
而且航班若要合法,應盡量早出發
所以我們逆拓撲序選點,能在后面出發的盡量后面出發,不會使其它點變得更劣,容易知是正確的
第二問只需枚舉航班\(x\),拓撲排序時忽視\(x\),最后無法選點時就是\(x\)最早的時間
#include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<map> #include<cstring> #include<algorithm> #define LL long long int #define Redge(u) for (register int k = h[u],to; k; k = ed[k].nxt) #define REP(i,n) for (register int i = 1; i <= (n); i++) #define res register #define mp(a,b) make_pair<int,int>(a,b) #define cp pair<int,int> using namespace std; const int maxn = 2005,maxm = 20005,INF = 1000000000; inline int read(){res int out = 0,flag = 1; res char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag; } int n,m,inde[maxn],K[maxn],val[maxn],ans[maxn]; int h[maxn],ne; struct EDGE{int to,nxt;}ed[maxm]; inline void build(int u,int v){ed[++ne] = (EDGE){v,h[u]}; h[u] = ne;inde[v]++; } priority_queue<cp> q; inline void solve1(){REP(i,n){val[i] = inde[i];if (!val[i]) q.push(mp(K[i],i));}cp u;for (int i = n; i; i--){u = q.top(); q.pop();ans[i] = u.second;Redge(u.second){if (!(--val[to = ed[k].to])) q.push(mp(K[to],to));}}REP(i,n){printf("%d",ans[i]);if (i < n) putchar(' ');}puts(""); } inline int solve2(int x){while (!q.empty()) q.pop();REP(j,n) val[j] = inde[j]; val[x] = n;REP(j,n) if (!val[j]) q.push(mp(K[j],j));cp u;for (res int j = n; j; j--){if (q.empty()) return j;u = q.top(); q.pop();if (u.first < j) return j;Redge(u.second) if (!(--val[to = ed[k].to])) q.push(mp(K[to],to));}return 1; } int main(){n = read(); m = read();REP(i,n) K[i] = read();int a,b;REP(i,m) {a = read(); b = read();build(b,a);}solve1();REP(i,n) printf("%d ",solve2(i));return 0; }轉載于:https://www.cnblogs.com/Mychael/p/9018305.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js用button激活 Alert 元素
- 下一篇: Oracle数据库mybatis 插入空