可撤銷並查集模板:
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 sustainable_dsu
int m = l+r >> 1;
build(lson[rt], l, m);
build(rson[rt], m+1, r);
}inline void init(int _n)
inline void update(int old, int &rt, int p, int v, int l, int r)
int m = l+r >> 1;
if(p <= m) update(lson[rt], lson[rt], p, v, l, m);
else update(rson[rt], rson[rt], p, v, m+1, r);
}inline void update(int rt, int p, int l, int r)
int m = l+r >> 1;
if(p <= m) update(lson[rt], p, l, m);
else update(rson[rt], p, m+1, r);
}///返回rt版本p位置fa陣列下標
inline int query(int rt, int p, int l, int r)
///返回rt版本p所在並查集fa陣列下標
inline int find(int rt, int p)
///在i時刻合併x和y所在並查集
inline void merge(int i, int x, int y)
}};
p3402 【模板】可持久化並查集
**:
#pragma gcc optimize(2)
#pragma gcc optimize(3)
#pragma gcc optimize(4)
#includeusing namespace std;
#define y1 y11
#define fi first
#define se second
#define pi acos(-1.0)
#define ll long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ull unsigned ll
#define pll pair#define pli pair#define pii pair#define piii pair#define pdd pair#define mem(a, b) memset(a, b, sizeof(a))
#define debug(x) cerr << #x << " = " << x << "\n";
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//head
struct sustainable_dsu
int m = l+r >> 1;
build(lson[rt], l, m);
build(rson[rt], m+1, r);
}inline void init(int _n)
inline void update(int old, int &rt, int p, int v, int l, int r)
int m = l+r >> 1;
if(p <= m) update(lson[rt], lson[rt], p, v, l, m);
else update(rson[rt], rson[rt], p, v, m+1, r);
}inline void update(int rt, int p, int l, int r)
int m = l+r >> 1;
if(p <= m) update(lson[rt], p, l, m);
else update(rson[rt], p, m+1, r);
}///返回rt版本p位置fa陣列下標
inline int query(int rt, int p, int l, int r)
///返回rt版本p所在並查集fa陣列下標
inline int find(int rt, int p)
///在i時刻合併x和y所在並查集
inline void merge(int i, int x, int y)
}}s;int n, m, op, a, b;
int main()
}return 0;
}
可持久化並查集 可撤銷並查集
主要學習的blog 1 將乙個點的父親 並查集那個fa 進行更改 實際上是新增乙個資訊點 update。2 查詢某個時間點下乙個pos對應的資訊點編號。3 查詢乙個點的父節點。4 更新乙個點的deep值,不用新寫函式,可以用3號操作找到編號後 5 初始化build。pragma gcc optimi...
帶撤銷並查集 可持久化並查集
帶撤銷並查集支援從某個元素從原來的集合中撤出來,然後加入到乙個另外乙個集合中,或者刪除該元素 用乙個對映來表示元素和並查集中序號的關係,中用 to x 表示x號元素在並查集中的 id 刪除 x 號元素時,需要將 to x 的集合大小減去1,然後令 to x 1 標記 x 刪除即可 如果要重新加入乙個...
可持久化並查集
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是上一次的輸出答案 並查集實質是乙個陣列,可持久化並查...