題解 P2168 NOI2015 荷馬史詩

2022-05-07 21:33:13 字數 962 閱讀 4885

題目鏈結

題目大意:構造\(k\)叉哈夫曼樹

哈夫曼樹

分析:這題比較模板,可以當做複習初賽(大霧)

哈夫曼樹的定義:

構造一棵有\(n\)個節點的\(k\)叉樹,每個節點帶有權\(w_i\),深度\(d_i\)(規定根深度為\(0\)),使得\(\sum w_i \times d_i\)最小

當\(k=2\)時即為合併果子,因此可以想出顯而易見的貪心演算法,每次從堆中取\(k\)個合併,但是這樣可能根節點的兒子不足\(k\)個,此時將葉節點移為根節點兒子會使得答案更優

因此我們需要額外補足一些\(w=0\)的虛擬點,讓兒子不足的情況發生在葉子結點

每次將\(k\)個節點合併使得總個數減少\(k-1\)個,使得\(n\)個節點合併為\(1\)個減少了\(n-1\)個,因此當\((k-1) | (n-1)\)時上述貪心演算法正確

題目還要求代價和最小時最大深度盡量小,權值相同時按照深度排序即可

#include #include #include using namespace std;

typedef long long ll;

inline ll read()

struct heapnode

};priority_queueq;

int n,k;

ll ans1,ans2;

int main());

while((n - 1) % (k - 1))q.push(heapnode),n++;

while(q.size() != 1)

ans1 += add1;

ans2 = max(ans2,add2 + 1);

q.push(heapnode);

} printf("%lld\n%lld\n",ans1,ans2);

return 0;

}

P2168 NOI2015 荷馬史詩

追逐荷馬的人,自己就是影子 荷馬 追逐影子的人,自己就是荷馬 影子 追逐荷馬的人,自己就是荷馬 影子 追逐影子的人,自己就是影子 荷馬 allison 最近迷上了文學。她喜歡在乙個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的 荷馬史詩 但是由 奧德賽 和 伊利亞特 組成的鴻篇巨制 荷馬...

Luogu P2168 NOI2015 荷馬史詩

給定一棵含 n 個葉子節點的 k 叉樹,其中第 i 的葉子有點權 a i 要求最小化 sum w i times l i 其中 l i 表示到根節點的距離 並求出在權值和最小的情況下樹的最小深度 huffman樹 先將 k 叉樹用權值為0的點補滿,然後每次選出權值最小的 k 個點合併 可以用堆實現,...

題解 NOI2015壽司晚宴

想好久啊 不敢寫啊 但果然人還是應當勇敢自信,只有堅定地去嘗試,才會知道最後的結果。1a真的太開心啦,不過好像我的做法還是比較複雜的樣子 理解起來應該算是比較容易好懂的型別,大家可以參考一下思路 首先我們先考慮一下簡單的30分演算法 30以內的質數只有十個左右,可以利用狀壓表示出兩個人所選擇的集合,...