File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed
Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change 1+ ``` java
2+ import java.io.* ;
3+ import java.util.* ;
4+
5+ public class Main {
6+ public static void main (String [] args ) throws Exception {
7+ BufferedReader br = new BufferedReader (new InputStreamReader (System . in));
8+ StringTokenizer st = new StringTokenizer (br. readLine());
9+ StringBuilder sb = new StringBuilder ();
10+
11+ int n = Integer . parseInt(st. nextToken());
12+ int m = Integer . parseInt(st. nextToken());
13+
14+ List<List<Integer > > graph = new ArrayList<> (n + 1 );
15+ for (int i = 0 ; i <= n; i++ ) graph. add(new ArrayList<> ());
16+
17+ int [] indeg = new int [n + 1 ];
18+ int [] semester = new int [n + 1 ];
19+
20+ for (int i = 0 ; i < m; i++ ) {
21+ st = new StringTokenizer (br. readLine());
22+ int a = Integer . parseInt(st. nextToken());
23+ int b = Integer . parseInt(st. nextToken());
24+ graph. get(a). add(b);
25+ indeg[b]++ ;
26+ }
27+
28+ Deque<Integer > q = new ArrayDeque<> ();
29+ for (int i = 1 ; i <= n; i++ ) {
30+ if (indeg[i] == 0 ) {
31+ semester[i] = 1 ;
32+ q. offer(i);
33+ }
34+ }
35+
36+ while (! q. isEmpty()) {
37+ int cur = q. poll();
38+ for (int nxt : graph. get(cur)) {
39+ semester[nxt] = Math . max(semester[nxt], semester[cur] + 1 );
40+ if (-- indeg[nxt] == 0 ) q. offer(nxt);
41+ }
42+ }
43+
44+ for (int i = 1 ; i <= n; i++ ) {
45+ sb. append(semester[i]). append(' ' );
46+ }
47+ System . out. println(sb. toString(). trim());
48+ }
49+ }
50+
51+ ```
You can’t perform that action at this time.
0 commit comments