日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

长链剖分

發(fā)布時(shí)間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 长链剖分 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一些定義

重兒子:子節(jié)點(diǎn)中 子樹深度 最大的節(jié)點(diǎn)。
輕兒子:除重兒子外的其它子節(jié)點(diǎn)。
重邊:從一個(gè)點(diǎn)到其重兒子的邊。
輕邊:從一個(gè)點(diǎn)到其輕兒子的邊。
重鏈:若干條相連的重邊形成的鏈。單獨(dú)的節(jié)點(diǎn)也看作重鏈。

那么,一棵樹就可以拆分為若干條極長(zhǎng)的重鏈。
實(shí)現(xiàn)與重鏈剖分類似。

一些性質(zhì)

1.所有鏈長(zhǎng)度之和是 (O(n)) 級(jí)別的。
2.任何一個(gè)節(jié)點(diǎn)的 (k) 級(jí)祖先所在的鏈的長(zhǎng)度大于等于 (k) 。
3.任何一個(gè)節(jié)點(diǎn)跳到根所跳的次數(shù)不會(huì)超過 (sqrt{n}) 次。

應(yīng)用

1
題意即在線求樹上 (k) 級(jí)祖先。
考慮把 (k) 折半,假設(shè)得到的數(shù)是 (r) 。
根據(jù)上面的第 2 條性質(zhì) , (r) 級(jí)祖先所在的重鏈長(zhǎng)度不短于 (r) 。
所以,我們只要預(yù)處理出每條重鏈上的所有點(diǎn)以及鏈頂?shù)?1~鏈長(zhǎng) 級(jí)祖先,
這樣,在知道 (r) 級(jí)祖先后,即可 (O(1)) 算出 (k) 級(jí)祖先。
但是,如果直接這么做,復(fù)雜度仍然是 (O(log n)) ,這樣的復(fù)雜度和倍增一樣,還是不夠優(yōu)秀。
接下來,可以發(fā)現(xiàn)只要滿足 (r>k/2) 即可用上面的做法做。
考慮讓 (r=highbit(k)) , (highbit(k)) 即 (k) 在二進(jìn)制下最高位所代表的值。
這樣,用倍增預(yù)處理后,即可得到一個(gè) (O(n log n)-O(1)) 的做法。
2
先考慮一個(gè) (O(n^2)) 的做法。
樹形 dp ,
設(shè) (dis(i,j)) 表示 (i) 到 (j) 的距離。
設(shè) (f_{i,j}) 表示滿足 (x) 在 (i) 的子樹中且 (dis(x,i)=j) 的 (x) 的個(gè)數(shù)。
設(shè) (g_{i,j}) 表示滿足 (x) , (y) 在 (i) 的子樹中且 (dis(lca(x,y),x)=dis(lca(x,y),y)=dis(lca(x,y),i)+j) 的數(shù)對(duì) ((x,y)) 的個(gè)數(shù)。((x
eq y))
考慮在掃到點(diǎn) (i) 時(shí)的轉(zhuǎn)移:
(ans+=g_{i,0}) ,
(ans+=sum limits_{x,y in son(i),x
eq y} f_{x,j-1} imes g_{y,j+1}) ,
(g_{i,j}+=sum limits_{x,y in son(i),x
eq y} f_{x,j-1} imes f_{y,j-1}) ,
(g_{i,j}+=sum limits_{x in son(i)} g_{x,j+1}) ,
(f_{i,j}+=sum limits_{x in son(i)} f_{x,j-1}) 。
這些轉(zhuǎn)移畫個(gè)圖就可以理解了,而且并不是重點(diǎn)。
這樣直接做可以得到一個(gè) (O(n^3)) 的做法,用前綴和優(yōu)化即可變成 (O(n^2)) 。
考慮繼續(xù)優(yōu)化這個(gè)算法。
長(zhǎng)鏈剖分,對(duì)于重兒子,直接繼承它的值,對(duì)于輕兒子,它一定是一條重鏈的頂端,所以直接暴力往下合并。
這樣,算法的復(fù)雜度變?yōu)?(O(sum) 鏈長(zhǎng) ()) ,即 (O(n)) 。
可以用指針實(shí)現(xiàn),比較方便。
總結(jié):維護(hù)與鏈長(zhǎng),即深度有關(guān)的信息時(shí),可以考慮使用長(zhǎng)鏈剖分優(yōu)化轉(zhuǎn)移。
3
比較顯然的貪心策略:每次找到一條最長(zhǎng)的路徑,記錄答案后把路徑上的權(quán)值清零。
這個(gè)策略可以用長(zhǎng)鏈剖分優(yōu)化。
令鏈長(zhǎng)為這條鏈上所有點(diǎn)的權(quán)值和。
可以發(fā)現(xiàn),因?yàn)橹劓湶恢睾希鋵?shí)這個(gè)貪心就可以轉(zhuǎn)化為選鏈長(zhǎng)最大的 (k) 條重鏈。

總結(jié)

以上是生活随笔為你收集整理的长链剖分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。