如果你0分 & 错在几万的询问 & 警示后人
查看原帖
如果你0分 & 错在几万的询问 & 警示后人
467107
Cap1taL楼主2023/12/12 23:01

请看一下你的线段树最后处理时,在叶子处是否撤销了添加的线段。

错误代码:(0分)

void Upd(int p){
	for(auto i:tr[p].ls){
		if(!dsu.check(eg[i].fi,eg[i].se)){
			for(auto j:tr[p].ls){
				if(i==j)	break;
				dsu.Back();
			}
			return ;
		}
		dsu.Union(eg[i].fi,eg[i].se);
	}
	if(tr[p].l==tr[p].r){
		ans[tr[p].l]=1;
		return ;
	}
	Upd(lc(p));
	Upd(rc(p));
	for(auto i:tr[p].ls){
		dsu.Back();
	}
}

正确代码:(100分)

void Upd(int p){
	for(auto i:tr[p].ls){
		if(!dsu.check(eg[i].fi,eg[i].se)){
			for(auto j:tr[p].ls){
				if(i==j)	break;
				dsu.Back();
			}
			return ;
		}
		dsu.Union(eg[i].fi,eg[i].se);
	}
	if(tr[p].l==tr[p].r){
		ans[tr[p].l]=1;
		for(auto i:tr[p].ls){
			dsu.Back();
		}
		return ;
	}
	Upd(lc(p));
	Upd(rc(p));
	for(auto i:tr[p].ls){
		dsu.Back();
	}
}
2023/12/12 23:01
加载中...