題目鏈結
description
zhx有一棵 n
nn 個點的樹,每條邊有乙個權值
定義乙個連通塊為乙個點集與使這些點連通的所有邊(這些點必需連通)
定義乙個連通塊的權值為這個連通塊的邊權和(如果乙個連通塊只包含乙個點那麼它的權值為 0
00 )
zhx想找乙個包含 1
11 號點的連通塊送給他的妹子,所以他希望你求出包含 1
11 號點的所有連通塊中權值第 k
kk 小的連通塊的權值
input
第一行兩個數 n
nn 和 k
kk接下來 n−1
n-1n−
1 行第 i
ii 行有兩個整數 fi,
vi
f_i,v_i
fi,vi
,表示第 i+1
i+1i+
1 號點的父親節點的編號和第 i+1
i+1i+
1 號節點到父親的近的邊權(為了方便 1
11 號點為所給樹的根)
output
一行乙個正整數表示答案對 998
,244
,353
998,244,353
998,24
4,35
3(乙個素數)取模後的結果,如果連通塊總數不足 k
kk 個那麼答案為權值最大的連通塊的權值。
sample input 1
321
223
sample output 1
2
sample input 2
3201
223
sample output 2
5
以節點 1
11 為根,對於每個節點建立一棵左偏樹,儲存該節點的所有子節點及與子節點相連的邊。
每乙個連通的匯出子圖可以通過可以用最後乙個加入的邊和其他與該匯出子圖相連的邊表示,這些邊可以放到乙個堆中維護。顯然用該方法表示乙個狀態的邊集中最短的邊一定是最後加入的邊。此時邊權大此狀態的最小狀態可能是不選最短邊的而選次短邊的的狀態或在該狀態基礎上再選乙個最短邊。第一種情況只需要在堆刪掉最短邊然後取出次短邊,邊權和=原邊權和-最短邊+次短邊;第二種情況要將最短邊刪掉,並將最短邊連的點的堆合併到當前堆中,此時堆中的最短邊就是要求的最短邊,邊權和=原邊權和+最短邊。將這兩種情況放到優先佇列中,然後取出權值和最小的再更新,類似dijkstra,就可以求出第 k
kk 小的權值和。
#include
#include
#include
#include
#define ll long long
using
namespace std;
inline
intqr()
while
(c >=
'0'&& c <=
'9')
return f * fu;
}const
int n =
1e5+
10, mod =
998244353
;struct leftist_tree t[n *45]
;leftist_tree()
inline
intmerge
(int x,
int y)
inline
void
insert
(int
&p,int x,
int v)
; p =
merge
(p, tot);}
} l;
int head[n]
, ver[n <<1]
, next[n <<1]
, edge[n <<1]
, tot;
int n, k;
inline
void
add(
int x,
int y,
int z)
ll ans;
struct node };
intmain()
priority_queue q;
q.push()
;for
(int i =
1; i <= k -1&&
!q.empty()
; i++
) ans = t.d;
int p = l.
merge
(l.t[t.p]
.lc, l.t[t.p]
.rc);if
(p)q.
push()
; p = l.
merge
(p, l.rt[l.t[t.p]
.x]);if
(p)q.
push()
;}printf
("%lld\n"
, ans % mod)
;return0;
}
多校胡策 round5 by yts1999
t1 顯然排序掃瞄就可以 資料出問題了 t2 題 是13年集訓隊 登頂計畫 的簡化版本 可以做兩遍凸殼 然後再按照每個點可以看到的最大深度排序 用鍊錶維護 orz yzy線段樹差點a掉 開錯陣列t3 暫時不會 資料出問題了 t1 include include include include usi...
題解 P3769 CH弱省胡策R2 TATT
luogu 求點數最多的四維偏序路徑 三維偏序可以直接第一層排序然後用 mathcal 分治,轉化成二位偏序問題來做,呢麼四維偏序怎麼做呢 眾所周知,mathcal tree 可以用來解決多維座標問題,且在隨機資料下複雜度很優秀,呢麼我們來用 mathcal tree 來解決這個問題。還是和四維偏序...
山西胡策 7
a.題意 給乙個有向圖無環連通圖,求新增一條邊x y後有向生成樹的方案數。n 100000 include using namespace std typedef long long ll const int n 100005,mo 1000000007 int ihead n cnt,n,m,x,...