BZOJ4010 HNOI2015 菜餚製作

2022-05-19 20:02:30 字數 998 閱讀 3888

有n道菜,有m個限制條件,每個限制條件輸入x,y,表示第x道菜要在第y道菜之前做

在滿足所有限制條件的情況下,編號小的菜要盡早做

求出滿足要求的菜的順序,如果沒有滿足要求的則輸出impossible!

拓撲排序

一開始想著將x連向y,然後跑拓撲,輸出字典序最小的序列

結果發現題目並不是要求字典序最小,而是要求較小的盡量靠前

那就跑逆拓撲序,然後倒著輸出就好了

因為等價於倒著的字典序最大,因為字典序最大相當於小的盡量靠後,即正著的小的盡量靠前。

#include#include

#include

#include

#include

using

namespace

std;

struct

node

a[110000];int len,last[110000

];int ru[110000],s[110000

];bool v[110000

];void ins(int x,int

y)priority_queue

q;intmain()

memset(v,

true,sizeof

(v));

bool bk=false

;

for(int i=1;i<=n;i++) if(ru[i]==0

) q.push(i);

int t=0

;

while(q.empty()==0

)

}if(t!=n) printf("

impossible!");

else

for(int i=n;i>=1;i--) printf("

%d "

,s[i]);

printf("\n

");}

return0;

}

BZOJ4010 HNOI2005 菜餚製作

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

HNOI2015 BZOJ4010 菜餚製作

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

bzoj4010 HNOI2015 菜餚製作

題目鏈結 題意 給出一張無向圖要求出乙個拓撲序列滿足1的位置最靠前 在保證上面的條件下使2的位置最靠前 在保證上面的條件下使3的位置最靠前 solution 構造逆拓撲序,套個堆每次選出編號最大的加入答案,輸出答案時從後往前輸出。有點難想,但是腦補一下還是ok的。bzoj4010 include i...