HNOI2015 菜餚製作 思想 拓撲排序

2021-08-06 00:12:03 字數 903 閱讀 4826

題意:求乙個拓撲序列,保證以1~n的優先順序,每個數盡量排在前面

分析:顯然求字典序最小的拓撲序有問題,字典序列由每個位置的數字決定,可是這裡有乙個1~n的優先順序,就是說盡量要保證1在前,以此類推。

如果說乙個元素,圖中不存在「與它深度相同」的元素的話,那麼它在拓撲序列中的位置一定是固定的,那麼我們考慮兩個深度相同的元素a,b(編號a前面的一句話:字典序列由每個位置的數字決定,這樣導致了逆向序列的字典序變大了。

所以演算法已經浮出水面:反向建邊,求字典序最大的拓撲序列,再反向輸出即可。

實現起來並不難,思路複雜,馬後炮一波…

另外的證明:

反著拓撲排序時,如果有一次沒有選擇最大的那乙個,則設當時最大的是

a,選的是a,

(a>a)

。則假設最終序列為

(s1)a(s2)a(s3)

,那麼顯然可以把a放到

a後面,變成

(s1)(s2)aa(s3)

,使得答案更優。

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

const int lim = 100005;

int n , m , du[lim] , ans[lim];

vectoredge[lim];

map> mp;

void addedge(int a , int b)

void toposort()

} if(ans[0] != n) puts("impossible!");

else }

void clear()

int main()

toposort();

} return 0;

}

HNOI2015 菜餚製作 題解

傳送門 hnoi2015 菜餚製作 根據題目的描述,我們要做的首先是一步一步的分析 這個題肯定是拓撲排序無疑,因為要求的是滿足固定條件 有向圖的連邊 的某種排列,而難點就在於如何拓撲排序。根據題目的描述,我們首先想到的是根據字典序大小進行排序,那麼我們就舉例幾組資料來驗證一下是否正確,那麼先看下面這...

拓撲排序 HNOI2015 菜餚製作

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

HNOI2015 菜餚製作 題解(貪心 拓撲)

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