點分治學習小記

2021-10-08 22:24:29 字數 396 閱讀 2984

話說點分治真的是好久好久以前就接觸過的東東了。

但是一直沒有真正實現過,鞏固過,只停留於表面。

那今天就來康康這東東是幹嘛的。

點分治是基於樹上的一種分治方法(類似於邊分治),用於處理大規模的樹上路徑問題。

可以模擬於一般的分治演算法,大分子點分治也是把問題分成一半一半地來做。

不同的是澱粉質點分治是把樹分成一半一半來做。

具體怎麼把樹分治,下面就來看。

由於是把樹分成一半一半,而且又是以點為分治中心,那麼樹中有乙個非常特別的點滿足這個性質。

那就是重心。

眾所周知,以樹的重心為根,則最大的子樹的大小最大為n

2\frac n 2

2n​。

得到分治中心後,我們考慮如何維護樹中的路徑資訊。分類討論: 待填

點分治學習

嗯,蒟蒻我剛學的就記錄一下 以洛谷的tree為模板講解 洛谷題目傳送門 了解點分治之前,首先要知道什麼是重心 要用到 簡單來說,就是子樹最小的那個節點,我們需要o n 地找到他來保證複雜度 void get root rg int now,rg int fm num max num,tot size...

點分治學習

嗯,蒟蒻我剛學的就記錄一下 以洛谷的tree為模板講解 洛谷題目傳送門 了解點分治之前,首先要知道什麼是重心 要用到 簡單來說,就是子樹最小的那個節點,我們需要o n 地找到他來保證複雜度 void get root rg int now,rg int fm num max num,tot size...

點分治學習

例題 考慮一顆邊權為1的樹上有多少個路徑正好為k的點對。我們考慮乙個這樣的樹,現在問,這個樹上有多少個點對之間的距離為k。首先,我們從根結點開始考慮。那麼我們可以把所有的路徑劃分為兩個部分 1,經過根結點的路徑。2,不經過根結點的路徑。對於第一種路徑,經過根節點,那麼就是x root y。也就是說這...