BZOJ4010 HNOI2015 菜餚製作

2022-05-12 15:24:51 字數 898 閱讀 2093

我對貪心的理解:

題目傳送門:

對於這道題,比較麻煩的是他要求的並不是完全字典序最小的乙個序列,而是滿足序號從小到大盡量要靠前。所以這就不能直接每次拓撲排序直接取最小值了,也許較大值取出來後就可以取更小的值了呢。

比如\(2\)號菜必須在\(5\)號菜後面處理,\(3\)號菜必須在\(4\)號菜後面處理。那麼直接按字典序最小就是\(1,4,3,5,2\)了,而題意要求的卻是\(1,5,2,4,3\)。

既然這個東西這麼麻煩使我們無法很快的判斷出哪個值應該放在前面,那麼我們就不去想哪個值放在前面了嘛。我們就去想,較大的值是不是應該放在更後面。

結果發現還真是這樣,那麼我們就直接倒著做,每次取可取值裡最大的值放在後面就行了,拓撲排序加堆優化就\(over\)了。

時間複雜度:\(o(nlogn)\)

空間複雜度:\(o(n)\)

**如下:

#include #include #include using namespace std;

const int maxn=1e5+5;

int n,m,tot,cnt,x,y;

int deg[maxn],ans[maxn];

int now[maxn],pre[maxn],son[maxn];

int read()

void clear()

void add(int a,int b)

struct heap

} int pop()

return res;

}}t;

void work()

}//拓撲排序加大根堆優化

void print_ans()

int main()

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