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是否屬於同一集合,是則輸出1否則輸出0
05 6
1 1 2
3 1 2
2 03 1 2
2 13 1 210
1出題人大sb
//(暴力)用rope實現可持久化陣列
#include#include
using
namespace
std;
using
namespace
__gnu_cxx;
const
int n=2e4+5
;rope
*h[n];
intn,m;
inline
intread()
while(ch>='
0'&&ch<='9')
return x*f;
}int
id,a,b,fx,fy;
int find(int
x)inline
void
merge()
}inline
bool
isone()
intmain()
if(opt==3
) }
return0;
}
3673 可持久化並查集 by zky
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是否屬...
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...