3673 可持久化並查集 by zky

2022-05-09 18:39:16 字數 1013 閱讀 8613

time limit: 5 sec  memory limit: 128 mb

submit: 2724  solved: 1206

[submit][status][discuss]

n個集合 m個操作

操作:1 a b 合併a,b所在集合

2 k 回到第k次操作之後的狀態(查詢算作操作)

3 a b 詢問a,b是否屬於同一集合,是則輸出1否則輸出0

05 6

1 1 2

3 1 2

2 03 1 2

2 13 1 210

1出題人大sb

沒錯我就是來騙訪問量的,

這道題和上一道題的唯一區別就是

不用xor!

#include#include

#include

#include

#include

#include

using

namespace

std;

using

namespace

__gnu_cxx;

const

int maxn=2000050

;const

int maxn=0x7fffffff

;void read(int &n)

while(c>='

0'&&c<='9')

flag==1?n=-x:n=x;

}rope

*rp[maxn];

inta[maxn];

intn,m,how,x,y,lastans;

int find(int i,int

x)void merge(int i,int x,int

y)int

main()

else

if(how==2

)

else

if(how==3

)

}return0;

}

3673 可持久化並查集 by zky

time limit 5 sec memory limit 128 mb submit 2170 solved 978 submit status discuss n個集合 m個操作 操作 1 a b 合併a,b所在集合 2 k 回到第k次操作之後的狀態 查詢算作操作 3 a b 詢問a,b是否屬於...

bzoj3673 可持久化並查集

bzoj 我們考慮把每個操作建成乙個點 i 對於 1 和 3 操作,連邊 i 1,i 對於 2 操作,連邊 k i,i 容易發現這是一棵樹,並且並查集的操作可以回退,那麼我們直接在樹上dfs,在進入節點 回溯時處理merge split 查詢即可.時間複雜度 o m log n 超短.pragma ...

BZOJ3673 可持久並查集

可以用線段樹維護 每個葉子結點存它父親的位置 查乙個點的父親和正常並查集差不多 記錄每個點的深度 當要相連的兩個點深度相同時 p,q 把q的deep 整體用主席樹維護 copy hzwer的 orz include include using namespace std inline int rea...