rt,正解算法我应该没理解错,是dfs序先根后枝依次赋值。但是全WA了,检查了几遍也不太清楚那里出问题了。qwq求助。
原代码如下:
#include<stdio.h>
#define rd read()
#define _ 0
const int MAXN=1e6+10;
int read(){
int x=0;
bool f=true;
char g=getchar();
while(!('0'<=g&&g<='9')){if(g=='-')f=!f;g=getchar();}
while(('0'<=g&&g<='9')){x=(x<<1)+(x<<3)+(g^48);g=getchar();}
return f?x:-x;
}
int n;
int weight[MAXN],cnt=0;
int head[MAXN],nex[MAXN],to[MAXN],tot=0;
void add(int u,int v){
to[++tot]=v;
nex[tot]=head[u];
head[u]=tot;
return;
}
void assignment(int root){//dfs
weight[root]=++cnt;
for(int i=head[root];i;i=nex[i]){
assignment(to[i]);
}
return;
}
int main(){
n=rd;
for(int i=1;i<=n-1;i++){
int u=rd;
add(u,rd);
}
assignment(1);
for(int i=1;i<=n;i++){
printf("%d ",weight[i]);
}
return ~~(0^_^0);
}