1+ package c291 ;
2+
3+ import java .nio .charset .StandardCharsets ;
4+ import java .util .ArrayList ;
5+ import java .util .Arrays ;
6+ import java .util .HashMap ;
7+ import java .util .LinkedList ;
8+ import java .util .List ;
9+ import java .util .Map ;
10+ import java .util .Queue ;
11+ import java .util .Scanner ;
12+ import java .util .stream .Collectors ;
13+
14+ public class Abc291_e {
15+ public static void main (String [] args ) {
16+ Scanner scanner = new Scanner (System .in , StandardCharsets .UTF_8 );
17+ int n = scanner .nextInt ();
18+ int m = scanner .nextInt ();
19+ int [][] xys = new int [m ][2 ];
20+ for (int i = 0 ; i < m ; i ++) {
21+ xys [i ][0 ] = scanner .nextInt ();
22+ xys [i ][1 ] = scanner .nextInt ();
23+ }
24+ System .out .println (solve (n , xys ));
25+ }
26+
27+ private static String solve (int n , int [][] xys ) {
28+ // 建图
29+ Map <Integer , List <Integer >> adj = new HashMap <>();
30+ int [] deg = new int [n ];
31+ for (int [] xy : xys ) {
32+ int u = xy [0 ] - 1 , v = xy [1 ] - 1 ;
33+ adj .computeIfAbsent (u , key -> new ArrayList <>()).add (v );
34+ deg [v ]++;
35+ }
36+
37+ // 拓扑序需要唯一
38+ Queue <Integer > queue = new LinkedList <>();
39+ for (int i = 0 ; i < n ; i ++) {
40+ if (deg [i ] == 0 ) {
41+ queue .add (i );
42+ }
43+ }
44+ if (queue .size () != 1 ) {
45+ return "No" ;
46+ }
47+ List <Integer > topo = new ArrayList <>();
48+ while (!queue .isEmpty ()) {
49+ int sz = queue .size ();
50+ int u = queue .remove ();
51+ topo .add (u );
52+ for (int v : adj .getOrDefault (u , new ArrayList <>())) {
53+ deg [v ]--;
54+ if (deg [v ] == 0 ) {
55+ queue .add (v );
56+ }
57+ }
58+ // 删一个只能加一个
59+ if (queue .size () > sz ) {
60+ return "No" ;
61+ }
62+ }
63+ if (topo .size () != n ) {
64+ return "No" ;
65+ }
66+
67+ int x = 1 ;
68+ int [] ans = new int [n ];
69+ for (int id : topo ) {
70+ ans [id ] = x ++;
71+ }
72+ return "Yes" + System .lineSeparator ()
73+ + Arrays .stream (ans ).mapToObj (String ::valueOf ).collect (Collectors .joining (" " ));
74+ }
75+ }
76+ /*
77+ E - Find Permutation
78+ https://atcoder.jp/contests/abc291/tasks/abc291_e
79+
80+ 唯一拓扑序
81+ */
0 commit comments