#include #include #include #include #include #include #include #define int long long using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } const int N = 2e5+5; int rt[N],sz[N],b[N]; struct lft{ #define ls node[u].lc #define rs node[u].rc struct aa{ int lc,rc,vl; }node[N*2]; int dis[N],ct; void pushup(int u){ dis[u] = dis[rs]+1; } int merge(int u,int v){ if(!u||!v){ return u+v; } if(node[u].vlE[N]; void dfs(int u,int f){ for(int x:E[u]){ if(x==f){ continue; } dfs(x,u); rt[u] = T.merge(rt[u],rt[x]); b[u]+=b[x];sz[u]+=sz[x]; } while(1){ // cout<<"RT:"<T.node[rt[u]].vl||sz[u]==0){ T.ins(u,a[u]); break; } if(sz[u]==1){ // int z = T.pop(u); b[u]+=a[u]-T.pop(u); break; } a[u]-=T.pop(u);a[u]+=T.pop(u); } // cout<<"U:"<