#include #include using namespace std; const int N=2e5+5,inf=0x3f3f3f3f; int w[N],to[N],ne[N],h[N]; int cnt=0; int n; struct Node { int fa; int sum; int max; int min; int len; // vector son; } a[N]; void add(int u,int v,int w1) { a[v].fa=u; w[++cnt]=w1; to[cnt]=v; ne[cnt]=h[u]; h[u]=cnt; } void dfs(int u) { int v,vmax; a[u].max=0; a[u].min=inf; a[u].len=0; for(int i=h[u]; i; i=ne[i]) { v=to[i]; dfs(v); a[u].sum+=a[v].sum+w[i]*(a[v].len+1); vmax=a[v].max+w[i]; a[u].max=a[u].max>vmax? a[u].max:vmax; a[u].min=a[u].min