bzoj 4530(DFS序 線段樹合併)

2021-08-08 21:41:02 字數 1335 閱讀 9645

傳送門

題解:對每個點建權值線段樹(權值即點在dfs序列中的編號),合併的時候直接合併兩個點根的線段樹,並連一下並查集,查詢的時候找到x,y所在樹的根f,假設dep[x]>dep[y],那答案就是(size[f]-size[x])*size[x](這一點的解釋盡快補上,不過好像不比較也能過,難道是資料水?)。

p.s.在詢問時要選深度更深的點的原因:

如果dep[x] < dep[y]並且選擇了x,那麼x的子樹就包括了y點,而答案是兩邊子樹大小的乘積,所以這樣會造成多餘貢獻,不合法。

BZOJ 4034 線段樹 DFS序

思路 先搞出來每個點的dfs序 要有入棧和出棧兩種狀態的 處理出來 線段樹區間有多少入棧的和多少出棧的 加區間的時候就加 入 出 wei 查字首和 by siriusren include include include using namespace std define n 200050 def...

bzoj 4034 DFS序 線段樹

這個題多了乙個操作難度直線上公升,看完題解才會寫 有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個 操作,分為三種 操作 1 把某個節點 x 的點權增加 a 操作 2 把某個節點 x 為根的子樹中所有點的點權都增加 a 操作 3 詢問某個節點 x 到根的路徑中所有點的點權和。按照...

dfs序 線段樹

傳送門 現有一棵樹,有以下操作 1.節點x及其所有子孫顏色都變更為k。2.要求你回答節點x的顏色。初始所有點都沒有染色。input 第一行乙個整數t t 10 表示樣例組數。對於每個測試樣例 第一行乙個整數n n 5e4 表示樹的節點個數。接下來n行,每行兩個整數u,v 1 u,v n 表示樹中u的...