日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接

BZOJ2535

題解

航班之間的關(guān)系形成了一個(gè)拓?fù)鋱D
而且航班若要合法,應(yīng)盡量早出發(fā)
所以我們逆拓?fù)湫蜻x點(diǎn),能在后面出發(fā)的盡量后面出發(fā),不會(huì)使其它點(diǎn)變得更劣,容易知是正確的

第二問(wèn)只需枚舉航班\(x\),拓?fù)渑判驎r(shí)忽視\(x\),最后無(wú)法選點(diǎn)時(shí)就是\(x\)最早的時(shí)間

#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; }

轉(zhuǎn)載于:https://www.cnblogs.com/Mychael/p/9018305.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。