参考:刘汝佳紫书P356
vector<int>G[MAXN];
int father[MAXN];//记录i结点的父亲是谁、
void read_tree(){ //读入
int u,v;
scanf("%d",&n);
for(int i=1; i<n; ++i){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
}
//转化过程、
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的相邻点
if(v!=fa) dfs(v, father[v] = u); //把v的父节点设为u,然后递归转化为以v为根节点的子树
}
}