P5290 十二省聯考2019 春節十二響

2022-05-24 06:48:07 字數 1153 閱讀 1896

考試的時候,本來想拿60的貪心,但是只拿了15……很不開心!

不過現在知道正解了qwq……

對於每個點,都開乙個優先佇列,這個優先佇列裡的值,代表這個點的子樹分成的若干個集合中最大的值。

那麼我們對於乙個沒有處理的點,分別列舉每乙個子樹,分別合併每乙個優先佇列,最後再加入這個點,得到新的優先佇列。

對於正確性,由於每乙個點都會單獨加入優先佇列,所以這個點和子樹中的任何乙個點都不是同一集合,滿足了題意,並且每一層的合併肯定是最優,大的和大的合併。

對於時間,由於每乙個點都會被進行上述操作,所以 n * ,對於列舉每個兒子的優先佇列,視為 logn ,刪除 logn ,所以複雜度o(n * log2n)。

考試沒想出來……嗚嗚嗚

#include#include

#include

#define mogeko qwq

#define ll long long

using

namespace

std;

const

int maxn = 2e5+10

;int

n,f,cnt;

ll w[maxn],tem[maxn],id[maxn];

ll ans;

inthead[maxn],to[maxn],nxt[maxn];

priority_queue

q[maxn];

void add(int x,int

y)void dfs(int

u)

if(q[id[v]].size() >q[id[u]].size()) swap(id[u],id[v]);

int cnt = 0

;

while(!q[id[v]].empty())

for(int i = 1; i <= cnt; i++)

q[id[u]].push(tem[i]);

}q[id[u]].push(w[u]);

}int

main()

dfs(1);

while(!q[id[1

]].empty())

printf(

"%lld

",ans);

return0;

}

P5290 十二省聯考2019 春節十二響

傳送門 考慮乙個子樹裡是怎麼劃分的,維護劃分出來的每個集合的最大值,這個可以用乙個 multiset 維護 設 s x 表示節點 x 的子樹中,最優劃分 劃分出來的每個塊的節點最大值 首先葉子節點的集合顯然只有它本身 然後考慮子樹之間的合併,設兩個子樹根節點為 x,y 因為兩個子樹之間一定不會有祖先...

洛谷P5290 春節十二響

傳送門 qaqqaq 題意 給你一棵樹,每個點有權值,把樹上 n 個點分成若干個集合,每個集合中的元素兩兩之間不存在祖先關係,使得每個集合中的最大值之和最小 思路 觀察部分分,我們會發現有乙個 鏈 的樣例。我們看鏈的思路 1為頂點,那麼1兩端就是兩條鏈,每個集合中每條鏈只能包含1個元素,然後1頂點單...

十二省聯考2019 遊記

在機房呆了一天,大概看了看原先寫過的題,有點頹。下午的時候和大家一起打掃了一下機房。走的時候,看著空無一字的黑板,風吹起的棕黃色窗簾,遠方的藍色天空,有一種很濃厚的哀傷。時間過得真快啊,轉眼就是省選了呢。許是要退役了吧?許是要退役了吧。下午去試機了,感覺鍵盤不太星啊。考場倒是換了乙個地方 但是不讓我...