vector <int> G[maxn];
void read_tree(){
    int u,v;
    scanf("%d",&n);
    for(int i = 0; i < n-1; i++){
        scanf("%d%d",&u,&v);
        G[u].push_back(v);///输入u相邻的点v
        G[v].push_back(u);
    }
}
int p[maxn];
memset(p,sizeof(p),-1);
void dfs(int u,int fa){///递归转化为以u为根的子树,u 的父节点为fa
    int d= G[u].size();///结点u的相邻点个数
    for(int i = 0; i < d;i++){
        int v = G[u][i];///结点u的第i个相邻点v
        if(v != fa) dfs(v, p[v] = v);///把v的父节点设为u,然后递归转化为以v为根的子树
    }
}