社区讨论
关于代码中按秩合并的一个问题
P5787【模板】线段树分治 / 二分图参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @locovveh
- 此快照首次捕获于
- 2023/10/30 17:20 2 年前
- 此快照最后确认于
- 2023/11/05 04:14 2 年前
为什么把大于改成小于就能过,不然就WA了呢
按理来说这个改成小于不是就变成深度大的并到深度小的上去了,不是应该T吗(但它过了)
CPPinline void merge(int k,int x,int y) {
int a=op[x],b=op[y],t1=x,t2=y;
if(d[a]>d[y]) swap(a,y);
if(a&&y) s.push(data(a,k,d[a]==d[y])),d[y]+=d[a]==d[y],f[a]=y;
w.push(QWQ(t1,op[t1],k)),op[t1]=t2;
if(d[b]>d[x]) swap(b,x);
if(b&&x) s.push(data(b,k,d[b]==d[x])),d[x]+=d[b]==d[x],f[b]=x;
w.push(QWQ(t2,op[t2],k)),op[t2]=t1;
}
inline void work(int k,int x,int y) {
int r1=find(x),r2=find(y);
if(r1==r2) return ok[k]=1,void();
merge(k,r1,r2);
}
CPPinline void merge(int k,int x,int y) {
int a=op[x],b=op[y],t1=x,t2=y;
if(d[a]<d[y]) swap(a,y);
if(a&&y) s.push(data(a,k,d[a]==d[y])),d[y]+=d[a]==d[y],f[a]=y;
w.push(QWQ(t1,op[t1],k)),op[t1]=t2;
if(d[b]<d[x]) swap(b,x);
if(b&&x) s.push(data(b,k,d[b]==d[x])),d[x]+=d[b]==d[x],f[b]=x;
w.push(QWQ(t2,op[t2],k)),op[t2]=t1;
}
inline void work(int k,int x,int y) {
int r1=find(x),r2=find(y);
if(r1==r2) return ok[k]=1,void();
merge(k,r1,r2);
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...