请检查在进行操作一时是否于两个点在同一集合的情况下忘记储存新的版本,本人就是写成了
inline void uni(int a,int b,int c){
a=find(a,c-1),b=find(b,c-1);
if(a==b)return;//<---
depa=query(root[c-1],a,1);
depb=query(root[c-1],b,1);
if(depa<depb)swap(a,b);
root[c]=root[c-1];//<---
upd(root[c],b,a);
upd(root[c],a,a,max(depb+1,depa));
return;
}
导致调了好久。