小蒟蒻黄偏橙题求助!
查看原帖
小蒟蒻黄偏橙题求助!
134593
反手一只MJJ楼主2022/10/19 20:30

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);
}

2022/10/19 20:30
加载中...