社区讨论

关于代码中按秩合并的一个问题

P5787【模板】线段树分治 / 二分图参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@locovveh
此快照首次捕获于
2023/10/30 17:20
2 年前
此快照最后确认于
2023/11/05 04:14
2 年前
查看原帖
RT,RT,为什么把大于改成小于就能过,不然就WA了呢
按理来说这个改成小于不是就变成深度大的并到深度小的上去了,不是应该T吗(但它过了)
CPP
inline 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);
}
CPP
inline 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 条回复,欢迎继续交流。

正在加载回复...