AcWing 860.Dyeing to judge Bipartite Graph(Dyeing) Described by Java
Cause of the changing of memory, this problem can be solved. It’s about Bipartite Graph.
Principle is if a pic is a bipartite graph just when there is no odd ring in.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Arrays; public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static PrintWriter pw = new PrintWriter(System.out); static int N = 100010, n, m; static int h[] = new int[N << 1], e[] = new int[N << 1], ne[] = new int[N << 1], idx; static int color[] = new int[N << 1]; public static void add(int a, int b) { e[idx] = b; ne[idx] = h[a]; h[a] = idx++; } public static void main(String[] args) throws IOException { String[] s = br.readLine().split(" "); n = Integer.parseInt(s[0]); m = Integer.parseInt(s[1]); Arrays.fill(h, -1); for (int i = 0; i < m; i++) { s = br.readLine().split(" "); int a = Integer.parseInt(s[0]); int b = Integer.parseInt(s[1]); add(a, b); add(b, a); } boolean flag = true; for (int i = 1; i <= n; i++) { if (color[i] == 0) { if (!dfs(i, 1)) { flag = false; break; } } } if (!flag) pw.println("No"); else pw.println("Yes"); pw.flush(); br.close(); } private static boolean dfs(int u, int c) { color[u] = c; for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (color[j] == 0) { if (!dfs(j, 3 - c)) return false; } else if (color[j] == c) return false; } return true; } }