@@ -133,17 +133,18 @@ class Solution:
133
133
if p[x] != x:
134
134
p[x] = find(p[x])
135
135
return p[x]
136
-
137
- mp = defaultdict(list )
138
- for i, j in dislikes:
139
- mp[i - 1 ].append(j - 1 )
140
- mp[j - 1 ].append(i - 1 )
136
+
137
+ dis = defaultdict(list )
138
+ for a, b in dislikes:
139
+ a, b = a - 1 , b - 1
140
+ dis[a].append(b)
141
+ dis[b].append(a)
142
+
141
143
for i in range (n):
142
- dis = mp[i]
143
- for j in dis:
144
+ for j in dis[i]:
144
145
if find(i) == find(j):
145
146
return False
146
- p[find(j)] = find(dis[0 ])
147
+ p[find(j)] = find(dis[i][ 0 ])
147
148
return True
148
149
```
149
150
@@ -153,35 +154,38 @@ class Solution:
153
154
154
155
``` java
155
156
class Solution {
156
- public :
157
- vector< int > p;
158
-
159
- bool possibleBipartition (int n , vector <vector <int >>& dislikes ) {
160
- p. resize(n);
161
- for (int i = 0 ; i < n; ++ i) p[i] = i;
162
- unordered_map< int , vector< int >> mp;
163
- for (auto e : dislikes)
164
- {
165
- mp[e[0 ] - 1 ]. push_back(e[1 ] - 1 );
166
- mp[e[1 ] - 1 ]. push_back(e[0 ] - 1 );
157
+ private int [] p;
158
+
159
+ public boolean possibleBipartition (int n , int [][] dislikes ) {
160
+ p = new int [n];
161
+ List<Integer > [] dis = new List [n];
162
+ for (int i = 0 ; i < n; ++ i) {
163
+ p[i] = i;
164
+ dis[i] = new ArrayList<> ();
167
165
}
168
- for (int i = 0 ; i < n; ++ i)
169
- {
170
- auto dis = mp[i];
171
- for (int j : dis)
172
- {
173
- if (find(i) == find(j)) return false ;
174
- p[find(j)] = find(dis[0 ]);
166
+ for (int [] d : dislikes) {
167
+ int a = d[0 ] - 1 , b = d[1 ] - 1 ;
168
+ dis[a]. add(b);
169
+ dis[b]. add(a);
170
+ }
171
+ for (int i = 0 ; i < n; ++ i) {
172
+ for (int j : dis[i]) {
173
+ if (find(i) == find(j)) {
174
+ return false ;
175
+ }
176
+ p[find(j)] = find(dis[i]. get(0 ));
175
177
}
176
178
}
177
179
return true ;
178
180
}
179
181
180
- int find (int x ) {
181
- if (p[x] != x) p[x] = find(p[x]);
182
+ private int find (int x ) {
183
+ if (p[x] != x) {
184
+ p[x] = find(p[x]);
185
+ }
182
186
return p[x];
183
187
}
184
- };
188
+ }
185
189
```
186
190
187
191
### ** C++**
@@ -194,19 +198,19 @@ public:
194
198
bool possibleBipartition(int n, vector<vector<int>>& dislikes) {
195
199
p.resize(n);
196
200
for (int i = 0; i < n; ++i) p[i] = i;
197
- unordered_map<int, vector<int>> mp ;
198
- for (auto e : dislikes)
201
+ unordered_map<int, vector<int>> dis ;
202
+ for (auto& d : dislikes)
199
203
{
200
- mp[e[0] - 1].push_back(e[1] - 1);
201
- mp[e[1] - 1].push_back(e[0] - 1);
204
+ int a = d[0] - 1, b = d[1] - 1;
205
+ dis[a].push_back(b);
206
+ dis[b].push_back(a);
202
207
}
203
208
for (int i = 0 ; i < n; ++i)
204
209
{
205
- auto dis = mp[i];
206
- for (int j : dis)
210
+ for (int j : dis[i])
207
211
{
208
212
if (find(i) == find(j)) return false;
209
- p[find(j)] = find(dis[0]);
213
+ p[find(j)] = find(dis[i][ 0]);
210
214
}
211
215
}
212
216
return true;
@@ -222,36 +226,34 @@ public:
222
226
### ** Go**
223
227
224
228
``` go
225
- var p []int
226
-
227
229
func possibleBipartition (n int , dislikes [][]int ) bool {
228
- p = make ([]int , n)
229
- for i := 0 ; i < n; i++ {
230
+ p := make ([]int , n)
231
+ dis := make ([][]int , n)
232
+ for i := range p {
230
233
p[i] = i
231
234
}
232
- mp := make (map [int ][]int )
233
- for _ , e := range dislikes {
234
- mp[e[0 ]-1 ] = append (mp[e[0 ]-1 ], e[1 ]-1 )
235
- mp[e[1 ]-1 ] = append (mp[e[1 ]-1 ], e[0 ]-1 )
235
+ var find func (x int ) int
236
+ find = func (x int ) int {
237
+ if p[x] != x {
238
+ p[x] = find (p[x])
239
+ }
240
+ return p[x]
241
+ }
242
+ for _ , d := range dislikes {
243
+ a , b := d[0 ]-1 , d[1 ]-1
244
+ dis[a] = append (dis[a], b)
245
+ dis[b] = append (dis[b], a)
236
246
}
237
247
for i := 0 ; i < n; i++ {
238
- dis := mp[i]
239
- for _ , j := range dis {
248
+ for _ , j := range dis[i] {
240
249
if find (i) == find (j) {
241
250
return false
242
251
}
243
- p[find (j)] = find (dis[0 ])
252
+ p[find (j)] = find (dis[i][ 0 ])
244
253
}
245
254
}
246
255
return true
247
256
}
248
-
249
- func find (x int ) int {
250
- if p[x] != x {
251
- p[x] = find (p[x])
252
- }
253
- return p[x]
254
- }
255
257
```
256
258
257
259
### ** ...**
0 commit comments