bzoj4010 HNOI2015 菜餚製作

2021-07-23 03:33:04 字數 948 閱讀 2914

(題目鏈結)

題意:給出一張無向圖要求出乙個拓撲序列滿足1的位置最靠前 ,在保證上面的條件下使2的位置最靠前 ,在保證上面的條件下使3的位置最靠前 ……

solution

構造逆拓撲序,套個堆每次選出編號最大的加入答案,輸出答案時從後往前輸出。

有點難想,但是腦補一下還是ok的。

**:

// bzoj4010

#include

#include

#include

#include

#include

#include

#include

#define mod 1000000007

#define inf 2147483640

#define ll long long

#define free(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);

using

namespace

std;

const

int maxn=100010;

struct edge e[maxn<<1];

priority_queue q;

int head[maxn],ans[maxn],d[maxn],n,m,top,cnt;

void link(int u,int v)

int main()

top=0;

while (q.size()) q.pop();

for (int i=1;i<=n;i++) if (!d[i]) q.push(i);

while (q.size())

}if (top!=n) printf("impossible!\n");

else

}return

0;}

BZOJ4010 HNOI2005 菜餚製作

分析 這應該比較明顯是個拓撲排序。序號小的要放前面,但是會受到後面很多菜的限制。其實序號小的優先考慮和序號大的最後考慮應該是差不多的。不知道科不科學,求大神指正 把圖中的邊全部反向,拓撲 堆維護剩下的節點中度為0且序號最大的。把得到的序列反向輸出。include include using name...

HNOI2015 BZOJ4010 菜餚製作

description 知名美食家小 a被邀請至atm 大酒店,為其品評菜餚。atm 酒店為小 a 準備了 n 道菜餚,酒店按照為菜餚預估的質量從高到低給予 1到n的順序編號,預估質量最高的菜餚編號為1。由於菜餚之間口味搭配的問題,某些菜餚必須在另一些菜餚之前製作,具體的,一共有 m 條形如 i 號...

bzoj4010 HNOI2015 菜餚製作

給定n個點,m條邊的有向圖。求乙個排列p使對於所有x y有p x p y 且序號小的值盡量靠前 乍一看是求字典序最小的拓撲序列 其實並不是。可能是我太鶸了,其他dalao就不這麼覺得 orzw yqts 這裡有乙個反例.請不要吐槽為什麼這麼醜 所以只要較大的值盡量靠後.教小的值自然就靠前了.所以就倒...