#include #include #include #include #include using namespace std; int N; int W[2<<17]; vectorG[2<<17]; vectorS; int L[2<<17],R[2<<17]; long dfs0(int u,int p) { L[u]=S.size(); S.push_back(W[u]); long sum=W[u]; for(int v:G[u])if(v!=p)sum+=dfs0(v,u); S[L[u]]=sum; R[u]=S.size(); return sum; } long ALL,ans=9e18; setLft,ret; long f(long x,long y,long z){return max({x,y,z})-min({x,y,z});} void dfs1(int u,int p) { if(p!=-1) { {//lft long dn=S[L[u]]; long rest=ALL-dn; long mid=rest/2; auto it=Lft.lower_bound(mid); if(it!=Lft.end())ans=min(ans,f(dn,rest-*it,*it)); if(it!=Lft.begin()) { it--; ans=min(ans,f(dn,rest-*it,*it)); } } } setcur; for(int v:G[u])if(v!=p) { dfs1(v,u); if(cur.size()>N; for(int i=0;i>W[i]; for(int i=1;i>u>>v; u--,v--; G[u].push_back(v); G[v].push_back(u); } ALL=dfs0(0,-1); dfs1(0,-1); cout<