BZOJ4668 冷戰 並查集

2022-03-27 05:21:01 字數 609 閱讀 1592

比較自然的思路是,由於需要記錄連通塊合併時的資訊,所以需要建出kruskal重構樹。

不妨考慮在並查集合並的同時記錄資訊,pre[x]表示x與它的父親相連的時刻。

兩個點連通的時刻,等於兩個點之間路徑上時刻的最大值。

注意到按秩合併但不路徑壓縮的並查集不改變樹的結構,且樹高為log,正好符合要求。

$o(n\log n)$

1 #include2 #include3

#define rep(i,l,r) for (int i=(l); i<=(r); i++)

4using

namespace

std;56

const

int n=1000010;7

intn,m,op,u,v,ans,tim,he[n],fa[n],pre[n];89

int find(int x)

1011

void uni(int u,int v,int

tim)

1819

int lca(int u,int

v)29

30int

main()

39return0;

40 }

BZOJ4668 冷戰 並查集

time limit 10 sec memory limit 256 mb submit 538 solved 269 submit status discuss 1946 年 3 月 5 日,英國前首相溫斯頓 邱吉爾在美國富爾頓發表 鐵 幕演說 正式拉開了冷戰序幕。美國和蘇聯同為世界上的 超級大國...

BZOJ4668 冷戰 並查集

time limit 10 sec memory limit 256 mb submit 538 solved 269 submit status discuss 1946 年 3 月 5 日,英國前首相溫斯頓 邱吉爾在美國富爾頓發表 鐵 幕演說 正式拉開了冷戰序幕。美國和蘇聯同為世界上的 超級大國...

BZOJ4668 冷戰 並查集 LCA

題意 動態給點連邊 詢問兩個點之間最早是在第幾個操作連起來的 題解 因為並查集按秩合併 秩最高是logn的 所以我們可以考慮把秩看作深度 跑lca include using namespace std const int maxn 5e5 5 int n,m,cnt intfa maxn inti...