學習筆記 動態點分治

2022-02-05 16:13:26 字數 859 閱讀 7173

首先要會點分治

點分治有什麼好處?我們為什麼不直接用樹形dp?

它多用了乙個logn的代價,使得我們每次面對的都是過重心rt的路徑。

這樣,我們可以靈活用子樹來處理。

而樹形dp必須一次考慮所有過x的所有路徑。必須還要多處理乙個「和x有關」的資訊,多了o(n)的時空。

點分治由於同一層不用考慮其他路徑,所以複雜度和思維含量大大降低。

(分治都是這樣幹的。。)

然後需要修改。

動態點分治出現。

qtree4——動態點分治

[zjoi2015]幻想鄉戰略遊戲——動態點分治

基本處理思想是,先點分治一遍找到分治樹結構。

每個分治樹上的點維護一些資訊。

一般包括:自己管轄區域路徑過自己的資訊(這個是為了統計答案需要),和自己管轄區域對分治樹father的影響(這個是為了更新迅速、拆解方便、不重複統計等。因為自底向上更新,只有乙個father。不用列舉儲存father的子樹)

(子樹的並不用維護,因為每次修改查詢自底向上會處理到)

(我)經常還用的陣列是:dis[x][d],x到深度為d的father的距離。以及dep[x]x分治樹的深度。

修改一般都自底向上修改。複雜度基於分治樹高度的logn

查詢差不多。

關鍵是處理好資訊的維護。

分治的關鍵是:

1.可以有針對性地處理當前貢獻。都是過mid的點對等等。

2.情況獨立於其他的分治樹節點。即劃分子問題思想。這也為動態分治的方便維護打下堅實基礎。

3.層數的logn加上情況獨立,使得總複雜度是o(nlogn),本質上的節省統計次數,在於當前層的合併有針對性,

可以左右許多東西,利用乘法原理,乘法分配律,交換律,一起統計。

總結 動態點分治學習筆記

唔突然不想寫那麼長的總結了 大概思想就是維護乙個點分樹,這樣保證了樹高是 log 級別的,然後對於一些修改或者詢問,就可以支援諸如在點分樹上暴跳 text 這樣的暴力做法了。但是這並不是原來的樹,所以在點分樹上維護的資訊要以原樹為準。具體題目具體分析,但大方向是在點 i 維護點分樹上點 i 的子樹的...

點分治 動態點分治

實在拖得太久了。先扔掉資料 分治的核心是盡量把乙個整體分成接近的兩個部分,這樣遞迴處理可以讓複雜度從n 變成nlogn。兩個問題,如何區分和如何算答案。對於第乙個問題,重心,然後就是找重心的方法,兩個dfs,對於第二個問題,對於每個重心算當前塊中每個點到重心的答案,然後由重心分開的塊要把多餘的資訊去...

學習筆記 點分治

點分治,其實應該叫 樹上點分治 主要用於解決 樹上路徑問題 我亂起的名字 比如,樹上是否存在長為 k 的路徑,樹上長小於 k 的路徑有多少條等等.點分治可以概括為 分治 重心 桶 就目前我做過的幾道題來說都是這個套路 我們就直接針對一道題來吧.詢問樹上距離為 k 的點對是否存在 換句話說,就是樹上是...