这东西是UB吗
  • 板块学术版
  • 楼主Register
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/2/16 13:08
  • 上次更新2023/10/28 08:24:36
查看原帖
这东西是UB吗
80679
Register楼主2022/2/16 13:08

我在某题写了这样一段代码:

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

改成这样:

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;
		}
	}
}

在洛谷上就正常了……

调了一上午……

2022/2/16 13:08
加载中...