@@ -48,13 +48,136 @@ In the second semester, you can take course 3.
48
48
### ** Python3**
49
49
50
50
``` python
51
-
51
+ class Solution :
52
+ def minimumSemesters (self , n : int , relations : List[List[int ]]) -> int :
53
+ g = defaultdict(list )
54
+ indeg = [0 ] * n
55
+ for a, b in relations:
56
+ g[a - 1 ].append(b - 1 )
57
+ indeg[b - 1 ] += 1
58
+ ans = 0
59
+ q = deque([i for i, v in enumerate (indeg) if v == 0 ])
60
+ while q:
61
+ ans += 1
62
+ for _ in range (len (q)):
63
+ i = q.popleft()
64
+ n -= 1
65
+ for j in g[i]:
66
+ indeg[j] -= 1
67
+ if indeg[j] == 0 :
68
+ q.append(j)
69
+ return - 1 if n else ans
52
70
```
53
71
54
72
### ** Java**
55
73
56
74
``` java
75
+ class Solution {
76
+ public int minimumSemesters (int n , int [][] relations ) {
77
+ List<Integer > [] g = new List [n];
78
+ for (int i = 0 ; i < n; ++ i) {
79
+ g[i] = new ArrayList<> ();
80
+ }
81
+ int [] indeg = new int [n];
82
+ for (int [] r : relations) {
83
+ int a = r[0 ] - 1 , b = r[1 ] - 1 ;
84
+ g[a]. add(b);
85
+ ++ indeg[b];
86
+ }
87
+ Deque<Integer > q = new ArrayDeque<> ();
88
+ for (int i = 0 ; i < n; ++ i) {
89
+ if (indeg[i] == 0 ) {
90
+ q. offer(i);
91
+ }
92
+ }
93
+ int ans = 0 ;
94
+ while (! q. isEmpty()) {
95
+ ++ ans;
96
+ for (int k = q. size(); k > 0 ; -- k) {
97
+ int i = q. poll();
98
+ -- n;
99
+ for (int j : g[i]) {
100
+ if (-- indeg[j] == 0 ) {
101
+ q. offer(j);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ return n == 0 ? ans : - 1 ;
107
+ }
108
+ }
109
+ ```
110
+
111
+ ### ** C++**
112
+
113
+ ``` cpp
114
+ class Solution {
115
+ public:
116
+ int minimumSemesters(int n, vector<vector<int >>& relations) {
117
+ vector<vector<int >> g(n);
118
+ vector<int > indeg(n);
119
+ for (auto& r : relations)
120
+ {
121
+ int a = r[ 0] - 1, b = r[ 1] - 1;
122
+ g[ a] .push_back(b);
123
+ ++indeg[ b] ;
124
+ }
125
+ queue<int > q;
126
+ for (int i = 0; i < n; ++i) if (indeg[ i] == 0) q.push(i);
127
+ int ans = 0;
128
+ while (!q.empty())
129
+ {
130
+ ++ans;
131
+ for (int k = q.size(); k; --k)
132
+ {
133
+ int i = q.front();
134
+ q.pop();
135
+ --n;
136
+ for (int j : g[ i] ) if (--indeg[ j] == 0) q.push(j);
137
+ }
138
+ }
139
+ return n == 0 ? ans : -1;
140
+ }
141
+ };
142
+ ```
57
143
144
+ ### **Go**
145
+
146
+ ```go
147
+ func minimumSemesters(n int, relations [][]int) int {
148
+ g := make([][]int, n)
149
+ indeg := make([]int, n)
150
+ for _, r := range relations {
151
+ a, b := r[0]-1, r[1]-1
152
+ g[a] = append(g[a], b)
153
+ indeg[b]++
154
+ }
155
+ q := []int{}
156
+ for i, v := range indeg {
157
+ if v == 0 {
158
+ q = append(q, i)
159
+ }
160
+ }
161
+ ans := 0
162
+ for len(q) > 0 {
163
+ ans++
164
+ for k := len(q); k > 0; k-- {
165
+ i := q[0]
166
+ q = q[1:]
167
+ n--
168
+ for _, j := range g[i] {
169
+ indeg[j]--
170
+ if indeg[j] == 0 {
171
+ q = append(q, j)
172
+ }
173
+ }
174
+ }
175
+ }
176
+ if n == 0 {
177
+ return ans
178
+ }
179
+ return -1
180
+ }
58
181
```
59
182
60
183
### ** ...**
0 commit comments