#include <stdio.h>
#define N 200050
int n, m, i, j, k, a, b, c, h[N], r[N], q[N], f[N];
struct AB{
    int a, b, n;
} d[N];
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=m; i++){
        scanf("%d%d", &a, &b);
        d[i].a = a, d[i].b = b;
        d[i].n = h[a], h[a] = i;
        r[b]++;//统计入度
    }
    for(i=1; i<=n; i++){
        if(!r[i]) q[++j] = i;
    }//入度为零最小
    for(i=1; i<=j; i++){
        if(i < j) break;//多个入度为零不唯一
        a = q[i], f[a] = ++c;//依次编号
        for(k=h[a]; k; k=d[k].n){
            b = d[k].b;
            if(--r[b] == 0) q[++j] = b;
        }
    }
    if(i < j) printf("No\n");
    else{
        printf("Yes\n");
        for(i=1; i<=n; i++){
            printf("%d ", f[i]);
        }
    }
    return 0;
}

作者 crxis

发表回复