cogs1958 菜餚製作 拓撲排序

2022-03-27 02:51:22 字數 1114 閱讀 4555

題意:給出一些約束條件,要求得出字典序最小的符合所有條件的方案。

這道題很顯然是乙個在$aoe$上的程式流程問題,顯然是乙個拓撲排序。但是這個拓撲排序有點意思,因為它要求字典序最小。

那麼我們就要找出一種方法,使得最小的出現在最前面,那麼我們就考慮用堆維護,倒序建邊。

如果我們正序建邊,很有可能我們選取了乙個點之後再向下走發現了乙個更小的點,而且這個更小的點還是可以放在前面的。而如果倒序建邊,小的就一定會後出現,出現時大的已經出現過。那麼我們就用棧來表示,可以確定這一方案是最優的。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int maxn=100005

;10 template

11void clear(t &x)

1215

struct

node

16edge[maxn];

19int

head[maxn],tot;

20void addedge(int u,int

v)21

;head[u]=tot;23}

24 priority_queueq;

25 stacks;

26int

n,m;

27int

entrance_degree[maxn];

28int

haha()

2943

int cnt=0;44

for(int i=1;i<=n;i++)

45if(!entrance_degree[i])q.push(i);

46while(!q.empty())

4756}57

if(cnt!=n)puts("

impossible!");

58else

5965 puts(""

);66}67

}68}69

int sb=haha();

70int main()

cogs1958

P3243 HNOI2015 菜餚製作 拓撲排序

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

拓撲排序 HNOI2015 菜餚製作

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

HNOI2015 菜餚製作 思想 拓撲排序

題意 求乙個拓撲序列,保證以1 n的優先順序,每個數盡量排在前面 分析 顯然求字典序最小的拓撲序有問題,字典序列由每個位置的數字決定,可是這裡有乙個1 n的優先順序,就是說盡量要保證1在前,以此類推。如果說乙個元素,圖中不存在 與它深度相同 的元素的話,那麼它在拓撲序列中的位置一定是固定的,那麼我們...