主要學習的blog/
1、將乙個點的父親(並查集那個fa)進行更改 (實際上是新增乙個資訊點)update。
2、查詢某個時間點下乙個pos對應的資訊點編號。
3、查詢乙個點的父節點。
4、更新乙個點的deep值,不用新寫函式,可以用3號操作找到編號後++。
5、初始化build。
//view code#pragma gcc optimize(2)
//#pragma gcc optimize(3)
//#pragma gcc optimize(4)
#include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//using namespace __gnu_pbds;
using
namespace
std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<
#define bug cerr<
long
long
ll;typedef unsigned
long
long
ull;
typedef
long
double
ld;typedef pair
pii;
typedef pair
pll;
const
int inf = 0x3f3f3f3f
;const ll inff = 0x3f3f3f3f3f3f3f3f
;const
int mod = 998244353
;template
inline t read(t&x)
/**********showtime***********
*/int
n,m;
const
int maxn = 2e5+9
;
inttr[maxn];
struct
ttree[maxn * 30
];
int fa[maxn * 30], dp[maxn * 30
];
int tot = 0
;
void build(int & rt, int le, int
ri)
int mid = (le + ri) >> 1
; build(tree[rt].l, le, mid);
build(tree[rt].r, mid+1
, ri);
}void update(int last, int &rt, int le, int ri, int pos, int
ff)
int mid = (le + ri) >> 1
; tree[rt] =tree[last];
if(mid >=pos) update(tree[last].l, tree[rt].l, le, mid, pos, ff);
else update(tree[last].r, tree[rt].r, mid+1
, ri, pos, ff);
}int query(int rt, int le, int ri, int
pos)
int findfa(int rt, int
pos)
//void adddeep()
intmain()
if(dp[fu] >dp[fv]) swap(fu, fv);
update(tr[i-1], tr[i], 1
, n, fa[fu], fa[fv]);
if(dp[fu] ==dp[fv])
}else
if(op == 2
)
else
}return0;
}
下面再附上乙個可撤銷並查集的模板
///view code可撤回並查集模板
struct
ufs
inline
int find(int
x) inline
void merge(int x, int
y) );
fa[x] =y;
if(rnk[x] ==rnk[y]) );
rnk[y]++;}}
else
); fa[y] =x;}}
inline
void
undo()
}t;
帶撤銷並查集 可持久化並查集
帶撤銷並查集支援從某個元素從原來的集合中撤出來,然後加入到乙個另外乙個集合中,或者刪除該元素 用乙個對映來表示元素和並查集中序號的關係,中用 to x 表示x號元素在並查集中的 id 刪除 x 號元素時,需要將 to x 的集合大小減去1,然後令 to x 1 標記 x 刪除即可 如果要重新加入乙個...
演算法筆記 可撤銷並查集 可持久化並查集
可撤銷並查集模板 struct ufs inline int find int x inline void merge int x,int y fa x y if rnk x rnk y rnk y else fa y x inline void undo ufs 可持久化並查集模板 struct ...
可持久化並查集
n個集合 m個操作 1 a b 合併a,b所在集合 2 k 回到第k次操作之後的狀態 查詢算作操作 3 a b 詢問a,b是否屬於同一集合,是則輸出1否則輸出0 所給的a,b,k均經過加密,加密方法為x x xor lastans,lastans是上一次的輸出答案 並查集實質是乙個陣列,可持久化並查...