#define ls l,m,rt<<1 //左儿子
#define rs m+1,r,rt<<1|1 //右儿子
int a[N]; //点信息
int sum[N<<2],add[N<<2];//区间信息
const int N=10000;
vector<int>g[N];//邻接表
int cnt; //dfs标号
int f[N]; //保存结点u的父亲节点
int d[N]; //保存结点u的深度值
int size[N];//保存以u为根的子树节点个数
int son[N];//保存重儿子
int rk[N];//保存当前dfs标号在树中所对应的节点
int id[N];//保存树中每个节点剖分以后的新编号(DFS的执行顺序)
int top[N];//保存当前节点所在链的顶端节点