题意:问题D的反问题。。。
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n,u,v,Right=1,ans[maxn][2];
vector<int>g[maxn];
void dfs(int x,int fa,int left)
{
int num=(x==1)?g[x].size():g[x].size()-1;
Right+=num+1;
int l=Right;
ans[x][0]=left;ans[x][1]=Right;
for(int to:g[x])
{
if(to==fa) continue;
dfs(to,x,--l);//--l的意思是给同一层的兄弟节点从右往左依次给位置
}
}
int main()
{
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);
dfs(1,-1,1);
for(int i=1;i<=n;++i) printf("%d %d\n",ans[i][0],ans[i][1]);
}