1
var possibleBipartition = function (n, dislikes) {
2
const g = new Map();
3
dislikes.forEach(([a, b]) => {
4
const aDis = g.get(a) || [];
5
const bDis = g.get(b) || [];
6
g.set(a, aDis.concat(b));
7
g.set(b, bDis.concat(a));
8
});
9

10
const vis = new Array(n + 1).fill(false);
11
const col = new Array(n + 1).fill(-1);
12

13
const dfs = (n, c = 0) => {
14
if (vis[n]) return true;
15

16
col[n] = c;
17
vis[n] = true;
18

19
const nodes = g.get(n) || [];
20
for (let node of nodes) {
21
if (!vis[node]) {
22
if (!dfs(node, 1 - c)) return false;
23
}
24

25
if (node != n && col[node] == c) return false;
26
}
27

28
return true;
29
};
30

31
let canBi = true;
32
for (let i = 1; i <= n; i++) {
33
canBi &= dfs(i);
34
}
35
return canBi;
36
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0