1. 程式人生 > >【BZOJ】4530: [Bjoi2014]大融合

【BZOJ】4530: [Bjoi2014]大融合

給定 cnblogs 所在 算法 dfs www htm tle 深度

【題意】給定n個點的樹,從無到有加邊,過程中動態詢問當前圖某條邊兩端連通點數的乘積,n<=10^5。

【算法】線段樹合並+並查集  ||LCT(LCT維護子樹信息 LCT維護子樹信息(+啟發式合並))——嗷嗷待補

【題解】關鍵在於詢問邊兩端的連通點數。

將原樹計算dfs序(強制固定原樹形態,方便計算)

設size[x]表示點x所在連通塊的大小,那麽對於邊(u,v),fa[v]=u,有

ans=size[v]*(size[u]-size[v])。

如何實現size的動態計算?

對每個點各自按dfs序維護一棵線段樹表示哪些點在此連通塊,那麽連邊就是線段樹合並,詢問size就是對區間求和。

用並查集維護連通塊,連通塊中的點指向深度最小的點作為連通塊線段樹。

【BZOJ】4530: [Bjoi2014]大融合