【算法】有关点分治的一些理解与看法
說實話在很長一段時間內(nèi)都對于點分治算法感覺到比較的害怕。主要是感覺它的復雜度非常的高,而且莫名給我留下了一種點分治是有板子的印象。實際上是沒有的。而點分治由于將一棵樹每次都盡量地劃分為了相對平均的幾塊,所以就算代碼寫起來復雜度非常的高,效率往往而言也還是比較可觀的。如果在考試的時候遇到點分治的題目,個人認為就算不能寫出正確復雜度的解法,暴力點分一樣值得擁有啊~(主要是可能比一些其他的奇怪的暴力更為好寫)。
點分治主要用于處理與樹上路徑相關(guān)的問題。主要的思想在于:對于一個點 \(u\) 而言,所有的路徑都只有兩種可能:經(jīng)過該點的和不經(jīng)過該點的。這樣我們在遍歷到一個點的時候,統(tǒng)計出所有經(jīng)過它的路徑的答案,在此后我們就可以認為這個點不會再有用處,丟掉就好了。如何統(tǒng)計答案,則會與很多其他的算法相結(jié)合,鑒于本人做過的題目數(shù)量與難度均有限,目前來說一般而言是與dp或容斥相結(jié)合處理。(這里就充分的體現(xiàn)出點分治的優(yōu)越性:暴力的統(tǒng)計方法用點分治帶可以飛)。
實際上,除了分治的部分,剩下的完全可以看做是一個新的題目,例如樹形dp之類(還是很常見的)。例如 IOI2011 race 和 FJOI2014 最短路徑樹都是一樣的,這里有一個技巧:為了防止同一棵子樹內(nèi)的點對當前分治點產(chǎn)生貢獻,我們可以先統(tǒng)計答案,再更新記錄的數(shù)組。(類似01背包優(yōu)化,用于統(tǒng)計與當前子樹內(nèi)的路徑構(gòu)成的路徑的答案時,這個子樹的路徑尚未被包括進來。)而WC2010 重建計劃中,我也是運用了一個非常暴力的方法。很奇怪的WA了一個點,不過對于暴力算法來說也還是心滿意足了~
轉(zhuǎn)載于:https://www.cnblogs.com/twilight-sx/p/9256414.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【算法】有关点分治的一些理解与看法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【bzoj3672】购票
- 下一篇: Java学习之路(一):日常第一课,认识