社区讨论

这东西是UB吗

学术版参与者 5已保存回复 6

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@lo9avcie
此快照首次捕获于
2023/10/28 08:24
2 年前
此快照最后确认于
2023/10/28 08:24
2 年前
查看原帖
我在某题写了这样一段代码:
CPP
int merge(int st,int s){
	if(!s) return 0;
	for(int x=st;;x=so[x]){
		int ns=sz[st]-sz[so[x]];
		if(ns*2>=s){
			fa[lc[x]=merge(st,sz[st]-sz[x])]=fa[rc[x]=merge(so[x],s-ns)]=x;
			upd(x);return x;
		}
	}
}
本机是正常的(在同学的Ubuntu上也正常)
交到洛谷上某些时候就会出玄学锅,比如有东西fa[x]=x
改成这样:
CPP
int merge(int st,int s){
	if(!s) return 0;
	for(int x=st;;x=so[x]){
		int ns=sz[st]-sz[so[x]];
		if(ns*2>=s){
            lc[x]=merge(st,sz[st]-sz[x]);rc[x]=merge(so[x],s-ns);
			fa[lc[x]]=fa[rc[x]]=x;upd(x);
			return x;
		}
	}
}
在洛谷上就正常了……
调了一上午……

回复

6 条回复,欢迎继续交流。

正在加载回复...