Submission #869308


Source Code Expand

import java.io.*;
import java.util.*;

public class Main {

	BufferedReader br;
	PrintWriter out;
	StringTokenizer st;
	boolean eof;

	List<Integer>[] g;
	int v1 = -1, v2 = -1;

	int[][] cnt;
	int[] color;
	int[] par;

	void dfs(int v, int p, int col) {
		cnt[v][col]++;
		color[v] = col;
		par[v] = p;
		for (int u : g[v]) {
			if (u == p) {
				continue;
			}
			if (color[u] != -1) {
				v1 = v;
				v2 = u;
			} else {
				dfs(u, v, col ^ 1);
				cnt[v][0] += cnt[u][0];
				cnt[v][1] += cnt[u][1];
			}
		}
	}

	void solve() throws IOException {
		int n = nextInt();
		int m = nextInt();

		g = new List[n];
		for (int i = 0; i < n; i++) {
			g[i] = new ArrayList<>();
		}
		for (int i = 0; i < m; i++) {
			int v = nextInt() - 1;
			int u = nextInt() - 1;
			g[v].add(u);
			g[u].add(v);
		}

		cnt = new int[n][2];
		color = new int[n];
		par = new int[n];
		Arrays.fill(color, -1);
		dfs(0, -1, 0);

		long ans = 0;

		if (m == n - 1) {
			if (cnt[0][0] != cnt[0][1]) {
				ans = -1;
			} else {
				for (int i = 1; i < n; i++) {
					ans += Math.abs(cnt[i][0] - cnt[i][1]);
				}
			}
		} else if (color[v1] == color[v2]) {
			if (n % 2 == 1) {
				ans = -1;
			} else {
				int cv = color[v1];
				int delta = (cnt[0][cv ^ 1] - cnt[0][cv]) / 2;
				for (int v = v1; v != -1; v = par[v]) {
					cnt[v][cv] += delta;
				}
				for (int v = v2; v != -1; v = par[v]) {
					cnt[v][cv] += delta;
				}
				ans += Math.abs(delta);
				for (int i = 1; i < n; i++) {
					ans += Math.abs(cnt[i][0] - cnt[i][1]);
				}
			}
		} else {
			if (cnt[0][0] != cnt[0][1]) {
				ans = -1;
			} else {
				for (int i = 1; i < n; i++) {
					ans += Math.abs(cnt[i][0] - cnt[i][1]);
				}

				List<Integer> all = new ArrayList<>();
				for (int i = v2; i != v1; i = par[i]) {
					all.add(cnt[i][0] - cnt[i][1]);
					ans -= Math.abs(cnt[i][0] - cnt[i][1]);
				}

				all.add(0);
				
//				System.err.println(all);
				
				Collections.sort(all);
				int mid = all.get(all.size() / 2);
				for (int x : all) {
					ans += Math.abs(mid - x);
				}
			}
		}

		out.println(ans);
	}

	Main() throws IOException {
		br = new BufferedReader(new InputStreamReader(System.in));
		out = new PrintWriter(System.out);

		Thread t = new Thread(null, () -> {
			try {
				solve();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}, "lul", 1 << 26);
		t.start();
		try {
			t.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		out.close();
	}

	public static void main(String[] args) throws IOException {
		new Main();
	}

	String nextToken() {
		while (st == null || !st.hasMoreTokens()) {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (Exception e) {
				eof = true;
				return null;
			}
		}
		return st.nextToken();
	}

	String nextString() {
		try {
			return br.readLine();
		} catch (IOException e) {
			eof = true;
			return null;
		}
	}

	int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}
}

Submission Info

Submission Time
Task F - Namori
User mmaxio
Language Java8 (OpenJDK 1.8.0)
Score 2200
Code Size 3378 Byte
Status AC
Exec Time 842 ms
Memory 49600 KB

Compile Error

Note: ./Main.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 1500 / 1500 700 / 700
Status
AC × 4
AC × 20
AC × 66
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt
Subtask1 0_00.txt, 0_01.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 2_00.txt, 2_01.txt, 2_02.txt, 2_03.txt, 2_04.txt, 2_05.txt, 2_06.txt, 2_07.txt, 2_08.txt, 2_09.txt, 2_10.txt, 2_11.txt, 2_12.txt, 2_13.txt, 2_14.txt, 2_15.txt, 2_16.txt, 2_17.txt, 2_18.txt, 2_19.txt, 2_20.txt, 2_21.txt, 2_22.txt, 2_23.txt, 2_24.txt, 2_25.txt, 2_26.txt, 2_27.txt, 2_28.txt, 2_29.txt, 2_30.txt, 2_31.txt, 2_32.txt, 2_33.txt, 2_34.txt, 2_35.txt, 2_36.txt, 2_37.txt, 2_38.txt, 2_39.txt, 2_40.txt, 2_41.txt, 2_42.txt, 2_43.txt
Case Name Status Exec Time Memory
0_00.txt AC 310 ms 13560 KB
0_01.txt AC 278 ms 13164 KB
0_02.txt AC 265 ms 13172 KB
0_03.txt AC 282 ms 13940 KB
1_00.txt AC 274 ms 13260 KB
1_01.txt AC 666 ms 46100 KB
1_02.txt AC 641 ms 39820 KB
1_03.txt AC 610 ms 36272 KB
1_04.txt AC 664 ms 41912 KB
1_05.txt AC 638 ms 42924 KB
1_06.txt AC 661 ms 41688 KB
1_07.txt AC 642 ms 39968 KB
1_08.txt AC 667 ms 43068 KB
1_09.txt AC 615 ms 37228 KB
1_10.txt AC 614 ms 36576 KB
1_11.txt AC 626 ms 37184 KB
1_12.txt AC 630 ms 37112 KB
1_13.txt AC 650 ms 37700 KB
1_14.txt AC 618 ms 37372 KB
1_15.txt AC 630 ms 37232 KB
1_16.txt AC 654 ms 37224 KB
1_17.txt AC 642 ms 37140 KB
2_00.txt AC 258 ms 13068 KB
2_01.txt AC 714 ms 49600 KB
2_02.txt AC 670 ms 42252 KB
2_03.txt AC 630 ms 36424 KB
2_04.txt AC 678 ms 43064 KB
2_05.txt AC 750 ms 42060 KB
2_06.txt AC 738 ms 43268 KB
2_07.txt AC 696 ms 42832 KB
2_08.txt AC 710 ms 41960 KB
2_09.txt AC 650 ms 37120 KB
2_10.txt AC 646 ms 36852 KB
2_11.txt AC 626 ms 37432 KB
2_12.txt AC 614 ms 36676 KB
2_13.txt AC 642 ms 42316 KB
2_14.txt AC 646 ms 37284 KB
2_15.txt AC 650 ms 36464 KB
2_16.txt AC 654 ms 37308 KB
2_17.txt AC 654 ms 37356 KB
2_18.txt AC 274 ms 13776 KB
2_19.txt AC 662 ms 43044 KB
2_20.txt AC 606 ms 36140 KB
2_21.txt AC 842 ms 48764 KB
2_22.txt AC 670 ms 42968 KB
2_23.txt AC 631 ms 43064 KB
2_24.txt AC 683 ms 43524 KB
2_25.txt AC 683 ms 42644 KB
2_26.txt AC 690 ms 43000 KB
2_27.txt AC 614 ms 36748 KB
2_28.txt AC 646 ms 36848 KB
2_29.txt AC 642 ms 37340 KB
2_30.txt AC 658 ms 36688 KB
2_31.txt AC 654 ms 40692 KB
2_32.txt AC 623 ms 36972 KB
2_33.txt AC 634 ms 37380 KB
2_34.txt AC 614 ms 37368 KB
2_35.txt AC 650 ms 37216 KB
2_36.txt AC 602 ms 36468 KB
2_37.txt AC 626 ms 36476 KB
2_38.txt AC 610 ms 36720 KB
2_39.txt AC 622 ms 36688 KB
2_40.txt AC 611 ms 36828 KB
2_41.txt AC 578 ms 36228 KB
2_42.txt AC 614 ms 36896 KB
2_43.txt AC 630 ms 37048 KB