#include #include #define DEPTH 1024*2-1 #define WIDTH 1024 #define SIZE WIDTH*128 #define PARENT WIDTH-1 #define ROOT 1 int N_nodes; int N_merchants; int N_N[SIZE][WIDTH*2]; int tax[SIZE]; int c=0; long taxsum; int a[SIZE],b[SIZE]; void push_N_N(u,v){ N_N[u][++N_N[u][0]]=v; N_N[v][++N_N[v][0]]=u; } int select_root(){ int i,r,n,max=0; for (i=1;i<=N_nodes;i++) if ((n=N_N[i][0])>max){ max = n; r = i; } return r; } void order_nodes(r,parent){ int i,j,child; c++; N_N[r][DEPTH]=c; N_N[r][PARENT]=parent; for (i=1;i<=N_N[r][0];i++){ child = N_N[r][i]; if (child == parent ) continue; N_N[child][PARENT+(c+1)]=i; for (j=1;j1;d--){ for (i=1;i<=N_nodes;i++){ if (N_N[i][DEPTH]!=d) continue; tax[N_N[i][PARENT]]+=tax[i]; } } } int main(){ int i,j,k, u,v,mer,lca_node; scanf("%d",&N_nodes); for (i=1;i