void dfs2(int u,int f,int t){
	top[u]=t;
	ecnt++;
	w[ecnt]=a[u];
	dfn[u]=ecnt;
	if(wson[u]==0) return ;
	dfs2(wson[u],u,t);
	for(int i=0;i<e[u].size();i++){
		if(e[u][i]==f||e[u][i]==u||wson[u]==e[u][i]) continue;
		dfs2(e[u][i],e[u][i],e[u][i]);
	}
	return ;
}
这个代码你肯定看不出来哪里有问题。这里
dfs2(e[u][i],e[u][i],e[u][i]);
我的父亲应该是 u 而不应该重新改成 eu,i
正确的写法应该是
void dfs2(int u,int f,int t){
	top[u]=t;
	ecnt++;
	w[ecnt]=a[u];
	dfn[u]=ecnt;
	if(wson[u]==0) return ;
	dfs2(wson[u],u,t);
	for(int i=0;i<e[u].size();i++){
		if(e[u][i]==f||e[u][i]==u||wson[u]==e[u][i]) continue;
		dfs2(e[u][i],u,e[u][i]);
	}
	return ;
}