复问
查看原帖
复问
1000298
Vsinger_洛天依楼主2024/2/29 19:12

刚才发了个帖子求调,然后我交错题了导致以为自己过了。。。

所以只好再发一个了

这是原帖链接

现在的问题是我把我的push_reverse改成了下面这样

inline void push_up(int x){
	ansmax[x]=ansmin[x]=val[x];
    if(val[x]==0){
        ansmax[x]=-0x7f7f7f7f;
        ansmin[x]=0x7f7f7f7f;
    }
	if(lc){
        if(ansmax[lc])
		    ansmax[x]=max(ansmax[x],ansmax[lc]);
		if(ansmin[lc])
            ansmin[x]=max(ansmin[x],ansmin[lc]);
	} 
	if(rc){
        if(ansmax[rc])
		    ansmax[x]=max(ansmax[x],ansmax[rc]);
		if(ansmin[rc])
            ansmin[x]=max(ansmin[x],ansmin[rc]);
	} 
	// cerr<<x<<" "<<ansmax[x]<<endl;
}

然后只有5pts

这里应该是没有什么问题了,那么求教教我LCT的边权转点权是不是打错了。。。

这是我的边权转点权

	for(int i=1;i<n;++i){
        FastI>>x>>y>>val[i+n];
        link(T[i].x,i+n);
        link(T[i].y,i+n);
    }

我去查了几篇,发现似乎大部分人都不是这样写的。。。

所以我现在怀疑是这里的问题

完整代码依然在2楼

2024/2/29 19:12
加载中...