刚才发了个帖子求调,然后我交错题了导致以为自己过了。。。
所以只好再发一个了
这是原帖链接
现在的问题是我把我的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楼