警示后人
查看原帖
警示后人
678447
CSPAK_Zhangxiuqi0011楼主2024/8/26 11:13

请注意,修改的时候修改成的值 kk 可能是负数,所以在寻找路径最大值的时候初始值一定要设成负无穷大!线段树同理。因为本蒟蒻没踩坑所以并不知道会错哪几个点,因为我懒,所以你们可以自行测试一下附代码:
查找路径最大值:

int find_max_line(int x,int y){
	int ans;
	ans = INT_MIN;
	while(b[x].top!=b[y].top){
		if(b[b[x].top].d<b[b[y].top].d){
			swap(x,y);
		}
		ans = max(ans,find_max(1,b[b[x].top].id,b[x].id));
		x = b[b[x].top].fa;
	}
	if(b[x].d>b[y].d){
		swap(x,y);
	}
	ans = max(ans,find_max(1,b[x].id,b[y].id));
	return ans;
}//其中id是新编号,d是深度,top是当前重链的顶端

线段树内找最大值:

int find_max(int now,int l,int r){
	if(a[now].r<l || a[now].l>r){
		return INT_MIN;
	}
	if(l<=a[now].l && a[now].r<=r){
		return a[now].maxn;
	}
	return max(find_max(now*2,l,r),find_max(now*2+1,l,r));
}
2024/8/26 11:13
加载中...