1 class Solution { 2 int[] colors; 3 public boolean possibleBipartition(int N, int[][] dislikes) { 4 if(dislikes.length == 0) return true; 5 HashMap<Integer, List<Integer>> graph = new HashMap<>(); 6 for(int[] dislike : dislikes){ 7 if(!graph.containsKey(dislike[0])){ 8 graph.put(dislike[0], new ArrayList<>()); 9 } 10 if(!graph.containsKey(dislike[1])){ 11 graph.put(dislike[1], new ArrayList<>()); 12 } 13 graph.get(dislike[0]).add(dislike[1]); 14 graph.get(dislike[1]).add(dislike[0]); 15 } 16 colors = new int[N+1]; 17 for(int i = 1; i <= N; i++){ 18 if(colors[i] == 0){ 19 if(!dfs(graph, i, 1)){ 20 return false; 21 } 22 } 23 24 } 25 return true; 26 27 28 } 29 30 public boolean dfs(HashMap<Integer, List<Integer>> graph, int num, int color){ 31 if(colors[num] == 0){ 32 colors[num] = color; 33 }else if(colors[num] != color){ 34 return false; 35 }else{ 36 return true; 37 } 38 if(!graph.containsKey(num)) return true; 39 List<Integer> list = graph.get(num); 40 for(int person : list){ 41 if(dfs(graph, person, -color) == false){ 42 return false; 43 } 44 } 45 return true; 46 47 } 48 }