树链剖分刷题总结
前言
因為\(kma\)過菜導致被數(shù)據(jù)結(jié)構(gòu)吊打QWQ,這里總結(jié)一下做過的樹剖題,大概是個一句話題解+記錄犯過的睿智錯誤的地方
染色
傳送門
染色
分析
先考慮在線段樹上維護區(qū)間顏色段的做法:記一下區(qū)間左右端點,每次合并上來是左兒子總數(shù)+右兒子總數(shù),再判一下中間顏色是否一樣決定是否-1
在樹上維護同理,注意在跳重鏈的時候判一下兩段重鏈相鄰部分是否顏色一致
博客鏈接
染色
月下“毛景”樹
傳送門
月下“毛景”樹
分析
第一遍\(DFS\)的時候把邊權(quán)下放到點上,注意跳重鏈最后跳過\(LCA\)(\(LCA\)的點權(quán)是上面邊下放下來的)
博客鏈接:
月下“毛景”樹
松鼠的新家
傳送門
松鼠的新家
分析
每次走邊可以看做沿途點權(quán)+1,但起點不要+1(完美被坑)
(另:本題可以樹上差分,代碼待補)
博客鏈接:
松鼠的新家
部落沖突
傳送門
部落沖突
分析
先把邊權(quán)下放到點上(常規(guī)操作),然后考慮兩種辦法維護:
- 同染色,查詢區(qū)間顏色段是否為1且均為連通
- 維護區(qū)間最值,給連通和不連通分別打1或0,然后查詢最值判斷是否連通
博客鏈接
部落沖突
樹上操作
傳送門
樹上操作
分析
洛谷鏈剖板的弱化版,著重說一下字樹加等于直接在線段樹上\(modify(1,num[u],num[u]+siz[u]?1,d)\)(利用dfs序的思想,一波\(dfs\)下去一個節(jié)點的子樹(含它自己)的\(dfs\)序肯定是連續(xù)一段,且子樹節(jié)點中\(dfs\)序最大的一個為\(siz[u] - 1\)
博客鏈接
樹上操作
旅游
傳送門
旅游
分析
維護一個\(bool\)類型的反色標記記錄是否需要取反(取兩次等于不取),每次取反時\(sum(p) -= 2 * sum(p)\),最大值變成原最小值的相反數(shù),最小值同理
坑點:
聽說上面的代碼可以這么寫:
我tm當場去世。
博客鏈接
旅游
轉(zhuǎn)載于:https://www.cnblogs.com/kma093/p/11154809.html
總結(jié)
- 上一篇: 又有程序员把产品经理给打了!
- 下一篇: 那些把公司当家的程序员,后来怎么样了..