BZOJ 4010 菜餚製作

2022-07-22 06:48:12 字數 2135 閱讀 5099

知名美食家小a被邀請至atm 大酒店,為其品評菜餚。

atm酒店為小a準備了\(n\)道菜餚,酒店按照為菜餚預估的質量從高到低給予\(1\)到\(n\)的順序編號,預估質量最高的菜餚編號為\(1\)。由於菜餚之間口味搭配的問題,某些菜餚必須在另一些菜餚之前製作,具體的,一共有\(m\)條形如「\(i\)號菜餚『必須』先於\(j\)號菜餚製作」的限制,我們將這樣的限制簡寫為\(< i,j>\)。現在,酒店希望能求出乙個最優的菜餚的製作順序,使得小 a能盡量先吃到質量高的菜餚:也就是說,\((1)\)在滿足所有限制的前提下,\(1\)號菜餚「盡量」優先製作;\((2)\)在滿足所有限制,\(1\)號菜餚「盡量」優先製作的前提下,\(2\)號菜餚「盡量」優先製作;\((3)\)在滿足所有限制,\(1\)號和\(2\)號菜餚「盡量」優先的前提下,\(3\)號菜餚「盡量」優先製作;\((4)\)以此類推。

例\(1\):共\(4\)道菜餚,兩條限制\(<3,1>,<4,1>\),那麼製作順序是\(3,4,1,2\)。

例\(2\):共\(5\)道菜餚,兩條限制\(<5,2>,<4,3>\),那麼製作順序是\(1,5,2,4,3\)。例\(1\)裡,首先考慮\(1\),因為有限制\(<3,1>\)和\(<4,1>\),所以只有製作完\(3\)和\(4\)後才能製作\(1\),而根據\((3)\),\(3\)號又應「盡量」比\(4\)號優先,所以當前可確定前三道菜的製作順序是\(3,4,1\);接下來考慮\(2\),確定最終的製作順序是\(3,4,1,2\)。例\(2\)裡,首先製作\(1\)是不違背限制的;接下來考慮\(2\)時有\(<5,2>\)的限制,所以接下來先製作\(5\)再製作\(2\);接下來考慮\(3\)時有\(<4,3>\)的限制,所以接下來先製作\(4\)再製作\(3\),從而最終的順序是\(1,5,2,4,3\)。現在你需要求出這個最優的菜餚製作順序。無解輸出「impossible!」 (不含引號,首字母大寫,其餘字母小寫)

第一行是乙個正整數\(d\),表示資料組數。

對於每組資料:

第一行兩個用空格分開的正整數\(n\)和\(m\),分別表示菜餚數目和製作順序限制的條目數。

接下來\(m\)行,每行兩個正整數\(x,y\),表示「\(x\)號菜餚必須先於\(y\)號菜餚製作」的限制。(注意:\(m\)條限制中可能存在完全相同的限制)

輸出檔案僅包含\(d\)行,每行\(n\)個整數,表示最優的菜餚製作順序,或者」impossible!」表示無解(不含引號)。

3

5 45 4

5 34 2

3 23 3

1 22 3

3 15 2

5 24 3

1 5 3 4 2

impossible!

1 5 2 4 3

\(n,m \le 100000,d \le 3\)

考試的時候打的\(70'\)做法,即從小到大依次確定可以放置的最前的位置。複雜度\(o(n^)\)。

正解的做法很簡單,卻並不好像,好像跟noi2010航空管制很像。

將圖反連,我們從小到大確定每個最前的位置,即在反top序中從小到大最後的位置。我們還是topsort,只是每次取出的點是所有入度為\(0\)的標號最大的點。這要的貪心 ,我們就可以保證編號小的盡可能的在後面。最後將top序反著輸出即可。

#include#include#include#include#includeusing namespace std;

#define maxn (100010)

int d[maxn],side[maxn],next[maxn*2],toit[maxn*2],ans[maxn],cnt,n,m;

inline void add(int a,int b)

struct cmp };

set s;

inline bool topsort()

return tot == n;

}int main()

fclose(stdin); fclose(stdout);

return 0;

}

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...