bzoj1483: [HNOI2009]夢幻布丁
每個顏色建一顆線段樹,改色就是暴力合併兩個顏色的線段樹,維護連續區間個數即可。
p.s 也可以鏈表合併做
2212: [Poi2011]Tree Rotations
從葉子節點向上,計算後的逆序對個數和原來的逆序對個數,貪心換/不換。
計算逆序對個數可以線段樹以權值爲下標處理
p.s 也可以做
BestCoder Round #52 (div.1) 3.Victor and Proposition
建圖連邊求SCC,設第個SCC大小爲爲,
問題似乎是深度差不超過而不是標號(其實也沒什麼區別,下面就按深度來)
線段樹優化連邊:
對於每個點的子樹維護以深度爲下標的線段樹,向的線段樹連邊。
至於每個點的線段樹:可以對葉子結點都建立一顆,每次線段樹合併上去即可。
SPOJ COT6
沒有找到原題…
題意:
稱有根樹的一條路徑爲直鏈當且僅當路徑上任意兩點都存在祖孫關係。
現在給定一顆頂點帶權的有根樹,要求把它劃分成若干直鏈,使得每條直鏈的權和的平方和最小。
每個頂點的權都是整數,保證任意直鏈的權和都在範圍內,答案不超過。
口胡題解(???):
記錄每個點到根的點權和。
考慮選出根到結點的直鏈後將樹劃分成了若干森林(根到的路徑上的若干兄弟結點子樹&的所有兒子結點子樹),故設表示子樹的最優值,,表示子樹中去掉路徑的點後的森林的最優值。
爲方便表示,設表示當爲根時,結點在的子樹內(是的兒子結點)。
轉移:
拆分系數:
考慮對於所有,表示成平面上的點,維護下凸殼,斜率爲的直線與下凸殼切線的截距就是。
於是問題轉化成了對於每個點維護一些點的下凸殼,每次將所有點整體向上平移一定距離,並與兄弟結點的凸殼合併。
啓發式合並可以處理。
但這裏探討一下線段樹合併的做法:
線段樹下標爲離散化後座標。
同一個位置的合併對取即可,而對於兩段x軸上射影不相交的下凸殼(),維護葉子結點的雙向鏈表和相鄰點的向量,線段樹每個結點記錄範圍內凸殼上最左和最右的點,合併中間即可。
複雜度
SPOJ COT7
同找不到原題…
題意:
有根樹每個點有兩個權c和w,仍然是直鏈劃分,最小化w和的最小平方和。
劃分出的直鏈c的和必須在給定範圍[L,R]內。
保證任意直鏈的c和與w和都是int範圍內的整數
口胡題解(???):
比6多了一維的限制。
同樣維護點到根的的和。
大概是把離散化之後在線段樹上多套一維吧。。。
咕咕咕
SPOJ AE5A2
跑+線段樹合併把每個結點的集合求出來。
節點的線段樹中維護相鄰兩個出現位置之間的最大值(線段樹節點維護最左最右點),貢獻爲