社区讨论
为什么我的代码TLE on #6了
P3402【模板】可持久化并查集参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mjxyf6m4
- 此快照首次捕获于
- 2026/01/03 15:01 2 个月前
- 此快照最后确认于
- 2026/01/06 20:45 2 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+1;
int n, m, op, a, b, k, v;
struct Array{
int val[N<<5], L[N<<5], R[N<<5], root[N*2], idx;
int build1(int l, int r){
if (l==r){
val[++idx] = l;
return idx;
}
int rt = ++idx, mid = l + r >> 1;
L[rt] = build1(l, mid);
R[rt] = build1(mid+1, r);
return rt;
}
int build2(int l, int r){
if (l==r){
val[++idx] = 1;
return idx;
}
int rt = ++idx, mid = l + r >> 1;
L[rt] = build2(l, mid);
R[rt] = build2(mid+1, r);
return rt;
}
int modify(int p, int l, int r, int s, int t){
if (l==r){
val[++idx] = t;
return idx;
}
int rt = ++idx, mid = l + r >> 1;
if (s <= mid){
L[rt] = modify(L[p], l, mid, s, t);
R[rt] = R[p];
} else {
L[rt] = L[p];
R[rt] = modify(R[p], mid+1, r, s, t);
}
return rt;
}
int query(int p, int l, int r, int s){
if (l==r) return val[p];
int mid = l + r >> 1;
if (s <= mid) return query(L[p], l, mid, s);
return query(R[p], mid+1, r, s);
}
} fa, rk;
int getfa(int p, int x){
int f = fa.query(fa.root[p], 1, n, x);
while(f^x){
x = f;
f = fa.query(fa.root[p], 1, n, f);
}
return f;
}
int getrk(int p, int x){return rk.query(rk.root[p], 1, n, x);}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
fa.root[0] = fa.build1(1, n);
rk.root[0] = rk.build2(1, n);
while(m--){
cin>>op;
if (op==1){
cin>>a>>b;
int s = getfa(v, a), t = getfa(v, b);
int rs = getrk(v, s), rt = getrk(v, t);
if (rs > rt) swap(rs, rt), swap(s, t);
int r1 = fa.modify(fa.root[v], 1, n, s, t);
if (rs == rt){
int upd = rk.query(rk.root[v], 1, n, t);
rk.root[v+1] = rk.modify(rk.root[v], 1, n, t, upd+1);
} else rk.root[v+1] = rk.root[v];
fa.root[++v] = r1;
} else if (op==3){
cin>>a>>b;
int s = getfa(v, a), t = getfa(v, b);
cout << (s==t) << '\n';
fa.root[v+1] = fa.root[v];
rk.root[v+1] = rk.root[v];
++v;
} else {
cin>>k;
fa.root[++v] = fa.root[k];
rk.root[v] = rk.root[k];
}
}
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...