Submission #869224


Source Code Expand

#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <string>
#include <vector>
#include <bitset>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cassert>
#include <queue>

#define mp make_pair
#define pb push_back


typedef long long ll;
typedef long double ld;

using namespace std;
ll ans = 0;
int was[120000];
vector<int> eds[120000];
int cl[120000];
int cc[120000][2];
int a[120000];
int n, m;

void dfs1(int v, int c) {
	was[v] = 1;
	cl[v] = c;
	++cc[v][c];
	for (int u: eds[v]) {
		if (!was[u]) {
			dfs1(u, c^1);
			cc[v][0] += cc[u][0];
			cc[v][1] += cc[u][1];
		}
	}
	ans += abs(cc[v][0] - cc[v][1]);
}

vector<int> vv;
vector<int> st;

int dfs2(int v, int fr) {
	st.push_back(v);
	was[v] = 1;
	for (int u: eds[v]) {
		if (u == fr)
			continue;
		if (!was[u]) {
			if (dfs2(u, v))
				return 1;
		}
		else {
			while (st.back() != u)
				vv.push_back(st.back()), st.pop_back();
			vv.push_back(u);
			return 1;
		}
	}
	st.pop_back();
	return 0;
}

ll get(int x) {
	ll ans = 0;
	ll now = x;
	for (int i = 0; i < n; ++i) {
		now += a[i];
		ans += abs(now);
	}
	return ans;
}

int main() {
	scanf("%d%d", &n, &m);
	if (n % 2 == 1) {
		cout << -1 << "\n";
		return 0;
	}
	for (int i = 0; i < m; ++i) {
		int a, b;
		scanf("%d%d", &a, &b);
		--a;
		--b;
		eds[a].push_back(b);
		eds[b].push_back(a);
	}
	if (m == n - 1) {
		dfs1(0, 0);
		if (cc[0][0] != cc[0][1]) {
			cout << -1 << "\n";
		}
		else {
			cout << ans << "\n";
		}
	}
	else {
		dfs2(0, -1);
		memset(was, 0, sizeof(was));
		for (int i: vv)
			was[i] = 1;
		for (int i = 0; i < (int)vv.size(); ++i) {
			dfs1(vv[i], i % 2);
			a[i] = cc[vv[i]][0] - cc[vv[i]][1];
			ans -= abs(a[i]);
		}
		int sum = 0;
		for (int i = 0; i < (int)vv.size(); ++i)
			sum += a[i];
		n = vv.size();
		if ((int)vv.size() % 2 == 0) {
			if (sum != 0) {
				cout << -1 << "\n";
				return 0;
			}
			int lb = -120000;
			int rb = 120000;
			while (rb - lb > 3) {
				int m1 = lb + (rb - lb) / 3;
				int m2 = m1 + (rb - lb) / 3;
				if (get(m1) > get(m2))
					lb = m1;
				else
					rb = m2;
			}
			ll aans = 1e11;
			for (int j = lb; j <= rb; ++j)
				aans = min(aans, get(j));
			cout << ans + aans << "\n";
		}
		else {
			sum /= 2;
			ans += abs(sum);
			a[0] -= sum;
			a[n - 1] -= sum;
			cout << ans + get(0) << "\n";
		}
	}
	return 0;
}


Submission Info

Submission Time
Task F - Namori
User LHiC
Language C++14 (GCC 5.4.1)
Score 2200
Code Size 2506 Byte
Status AC
Exec Time 119 ms
Memory 15352 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:80:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
                       ^
./Main.cpp:87:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a, &b);
                        ^

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 8 ms 3072 KB
0_01.txt AC 9 ms 3072 KB
0_02.txt AC 10 ms 3584 KB
0_03.txt AC 8 ms 3584 KB
1_00.txt AC 9 ms 3072 KB
1_01.txt AC 88 ms 12288 KB
1_02.txt AC 78 ms 9216 KB
1_03.txt AC 61 ms 8184 KB
1_04.txt AC 85 ms 9984 KB
1_05.txt AC 87 ms 9728 KB
1_06.txt AC 83 ms 9728 KB
1_07.txt AC 84 ms 9216 KB
1_08.txt AC 84 ms 10112 KB
1_09.txt AC 72 ms 8064 KB
1_10.txt AC 74 ms 7936 KB
1_11.txt AC 78 ms 7936 KB
1_12.txt AC 79 ms 7808 KB
1_13.txt AC 8 ms 3072 KB
1_14.txt AC 84 ms 7808 KB
1_15.txt AC 82 ms 7808 KB
1_16.txt AC 8 ms 3072 KB
1_17.txt AC 79 ms 7808 KB
2_00.txt AC 9 ms 3584 KB
2_01.txt AC 115 ms 15352 KB
2_02.txt AC 87 ms 11900 KB
2_03.txt AC 61 ms 8184 KB
2_04.txt AC 94 ms 11772 KB
2_05.txt AC 96 ms 11772 KB
2_06.txt AC 101 ms 11644 KB
2_07.txt AC 95 ms 11772 KB
2_08.txt AC 99 ms 11644 KB
2_09.txt AC 79 ms 8192 KB
2_10.txt AC 79 ms 8064 KB
2_11.txt AC 80 ms 7936 KB
2_12.txt AC 86 ms 7936 KB
2_13.txt AC 8 ms 3072 KB
2_14.txt AC 84 ms 8192 KB
2_15.txt AC 88 ms 7936 KB
2_16.txt AC 8 ms 3072 KB
2_17.txt AC 86 ms 7936 KB
2_18.txt AC 8 ms 3072 KB
2_19.txt AC 85 ms 12028 KB
2_20.txt AC 61 ms 8184 KB
2_21.txt AC 119 ms 15352 KB
2_22.txt AC 94 ms 11900 KB
2_23.txt AC 94 ms 11772 KB
2_24.txt AC 93 ms 11644 KB
2_25.txt AC 87 ms 11900 KB
2_26.txt AC 91 ms 11644 KB
2_27.txt AC 79 ms 8192 KB
2_28.txt AC 81 ms 8064 KB
2_29.txt AC 85 ms 8064 KB
2_30.txt AC 87 ms 7936 KB
2_31.txt AC 8 ms 3072 KB
2_32.txt AC 86 ms 8192 KB
2_33.txt AC 85 ms 7936 KB
2_34.txt AC 8 ms 3072 KB
2_35.txt AC 81 ms 7936 KB
2_36.txt AC 65 ms 8184 KB
2_37.txt AC 65 ms 8184 KB
2_38.txt AC 64 ms 8184 KB
2_39.txt AC 64 ms 8184 KB
2_40.txt AC 62 ms 8184 KB
2_41.txt AC 65 ms 8184 KB
2_42.txt AC 62 ms 8184 KB
2_43.txt AC 66 ms 8184 KB