題解 P3243 HNOI2015 菜餚製作

2022-05-03 17:30:07 字數 964 閱讀 7697

這道題看起來就是個裸的拓撲排序,抄上模板就能ac。

上面這種想法一看就不現實,然鵝我第一次還真就這麼寫了,然後被隨意hack。

我們需要注意一句話:

現在,酒店希望能求出乙個最優的菜餚的製作順序,使得小 a能盡量先吃到質量高的菜餚:

這句話什麼意思呢?

看上去它是說想要乙個字典序最小的排列,但我們可以發現,題目並不是強求質量高一定先,而是有乙個寬限範圍(可能我講的比較玄學)。

解決方案是貪心地把大的放在末尾,那麼最後一定是最優解。

所以我們跑乙個字典序最大的拓撲就可以了。

字典序最大就是反著跑一遍字典序最小。

ac**如下:

820ms 133668kb

1 #include2

3using

namespace

std;45

namespace

standardio

1314 templateinline void

write (t x)

1920}21

22using

namespace

standardio;

2324

namespace

solve

40while (!q.empty()) 48}

49}5051 inline void

solve ()

59for (register int i=1; i<=m; ++i)

65toposort();

66if (cnt!=n) puts("

impossible!");

67else71}

7273}74

}7576using

namespace

solve;

7778

intmain ()

洛谷P3243 HNOI2015 菜餚製作

題目 菜餚製作 思路 拓撲排序 注意這裡不是輸出字典序最小的方案。讀入時反向連邊,對這張反圖拓撲排序時要把佇列改為優先佇列,再反向輸出結果。includeusing namespace std define maxn 100000 int n,m vectorg maxn 5 int du maxn...

洛谷P3243 HNOI2015 菜餚製作

題目傳送門 這道題看上去就知道是拓撲排序,再一看題,應該是求字典序最小的合法方案,所以貪心的找當前入度為0的編號最小的點就行了。恭喜,你掉到坑里了。其實我一開始就是這麼做的,後來在測樣例第三組資料的時候炸掉了,這組資料就可以卡掉這個貪心 這樣例還真良心啊 我們不妨反著考慮,最後一位放合法的最大值 設...

P3243 HNOI2015 菜餚製作 拓撲排序

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