Submission #1840992
Source Code Expand
#include <cstdio> #include <iostream> #include <algorithm> inline int Get() { char ch; while ((ch = getchar()) < '0' || ch > '9'); int Num = ch - '0'; while ((ch = getchar()) >= '0' && ch <= '9') Num = (Num << 3) + (Num << 1) + ch - '0'; return Num; } const int N = 1e5 + 5; int n, m, que[N], qn, fa[N], g[N], deg[N], flag[N], a[N], cnt; int tot, first[N], next[N << 1], end[N << 1], ans, sum[N], ret[N], w[N]; inline void AddEdge(int x, int y) { ++deg[x], ++deg[y]; next[++tot] = first[x], first[x] = tot, end[tot] = y; next[++tot] = first[y], first[y] = tot, end[tot] = x; } int calc(int x) { que[qn = 1] = x, fa[x] = 0; for (int ql = 1, u; u = que[ql], ql <= qn; ++ql) for (int k = first[u], v; v = end[k], k; k = next[k]) if (v != fa[u] && deg[v] < 2) fa[v] = u, que[++qn] = v; int res = 0; for (int qr = qn, u; u = que[qr], qr; --qr) for (int k = first[u], v; v = end[k], k; k = next[k]) if (v != fa[u] && deg[v] < 2) { int delta = 1 - g[v]; res += delta > 0 ? delta : -delta; g[u] += delta, g[v] += delta; } return res; } inline int Abs(int x) { return x > 0 ? x : -x; } int main() { n = Get(), m = Get(); for (int i = 1; i <= m; ++i) AddEdge(Get(), Get()); for (int i = 1; i <= n; ++i) if (deg[i] < 2) que[++qn] = i, flag[i] = true; for (int ql = 1, u; u = que[ql], ql <= qn; ++ql) for (int k = first[u], v; v = end[k], k; flag[v] = true, k = next[k]) if ((deg[v]--) == 2) que[++qn] = v; int x = 0; for (int i = 1; i <= n; ++i) if (deg[i] > 1) x = i; if (!x) { ans = calc(1); printf("%d\n", g[1] == 1 ? ans : -1); return 0; } a[cnt = 1] = x; while (true) { int u = a[cnt]; for (int k = first[u], v; v = end[k], k; k = next[k]) if (deg[v] > 1 && v != a[cnt - 1]) { a[++cnt] = v; break; } if (a[cnt] == x) { --cnt; break; } } for (int k = 1, u; u = a[k], k <= cnt; ++k) if (flag[u]) ans += calc(u); for (int k = 1, u; u = a[k], k <= cnt; ++k) sum[k] = 1 - g[u]; ret[1] = 0; for (int k = 2; k <= cnt; ++k) ret[k] = sum[k] - ret[k - 1]; if (cnt & 1) { int y = sum[1] - ret[1] - ret[cnt]; if (y & 1) { puts("-1"); return 0; } y >>= 1; for (int i = 1; i <= cnt; ++i) if (i & 1) ans += Abs(ret[i] + y); else ans += Abs(ret[i] - y); } else { if (ret[1] + ret[cnt] != sum[1]) { puts("-1"); return 0; } for (int i = 1; i <= cnt; ++i) if (i & 1) w[i] = -ret[i]; else w[i] = ret[i]; std :: sort(w + 1, w + cnt + 1); for (int i = 1; i <= cnt; ++i) if (i * 2 <= cnt) ans -= w[i]; else ans += w[i]; } printf("%d\n", ans); }
Submission Info
Submission Time | |
---|---|
Task | F - Namori |
User | wy1627 |
Language | C++14 (GCC 5.4.1) |
Score | 2200 |
Code Size | 2684 Byte |
Status | AC |
Exec Time | 23 ms |
Memory | 4992 KB |
Judge Result
Set Name | Sample | Subtask1 | All | ||||||
---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1500 / 1500 | 700 / 700 | ||||||
Status |
|
|
|
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 | 2 ms | 2304 KB |
0_01.txt | AC | 2 ms | 2304 KB |
0_02.txt | AC | 2 ms | 2304 KB |
0_03.txt | AC | 2 ms | 2304 KB |
1_00.txt | AC | 2 ms | 2304 KB |
1_01.txt | AC | 20 ms | 4480 KB |
1_02.txt | AC | 19 ms | 4608 KB |
1_03.txt | AC | 17 ms | 4480 KB |
1_04.txt | AC | 20 ms | 4480 KB |
1_05.txt | AC | 20 ms | 4480 KB |
1_06.txt | AC | 20 ms | 4480 KB |
1_07.txt | AC | 20 ms | 4480 KB |
1_08.txt | AC | 21 ms | 4480 KB |
1_09.txt | AC | 20 ms | 4608 KB |
1_10.txt | AC | 20 ms | 4480 KB |
1_11.txt | AC | 20 ms | 4480 KB |
1_12.txt | AC | 21 ms | 4608 KB |
1_13.txt | AC | 20 ms | 4480 KB |
1_14.txt | AC | 21 ms | 4480 KB |
1_15.txt | AC | 21 ms | 4480 KB |
1_16.txt | AC | 21 ms | 4480 KB |
1_17.txt | AC | 21 ms | 4608 KB |
2_00.txt | AC | 2 ms | 2304 KB |
2_01.txt | AC | 19 ms | 4608 KB |
2_02.txt | AC | 17 ms | 4992 KB |
2_03.txt | AC | 17 ms | 4608 KB |
2_04.txt | AC | 21 ms | 4992 KB |
2_05.txt | AC | 21 ms | 4992 KB |
2_06.txt | AC | 22 ms | 4992 KB |
2_07.txt | AC | 21 ms | 4992 KB |
2_08.txt | AC | 21 ms | 4992 KB |
2_09.txt | AC | 19 ms | 4608 KB |
2_10.txt | AC | 20 ms | 4608 KB |
2_11.txt | AC | 21 ms | 4608 KB |
2_12.txt | AC | 21 ms | 4608 KB |
2_13.txt | AC | 21 ms | 4736 KB |
2_14.txt | AC | 20 ms | 4608 KB |
2_15.txt | AC | 20 ms | 4608 KB |
2_16.txt | AC | 22 ms | 4608 KB |
2_17.txt | AC | 21 ms | 4608 KB |
2_18.txt | AC | 2 ms | 2304 KB |
2_19.txt | AC | 16 ms | 4736 KB |
2_20.txt | AC | 16 ms | 4608 KB |
2_21.txt | AC | 17 ms | 4608 KB |
2_22.txt | AC | 19 ms | 4736 KB |
2_23.txt | AC | 19 ms | 4736 KB |
2_24.txt | AC | 19 ms | 4736 KB |
2_25.txt | AC | 18 ms | 4736 KB |
2_26.txt | AC | 19 ms | 4736 KB |
2_27.txt | AC | 21 ms | 4608 KB |
2_28.txt | AC | 21 ms | 4608 KB |
2_29.txt | AC | 20 ms | 4608 KB |
2_30.txt | AC | 21 ms | 4608 KB |
2_31.txt | AC | 21 ms | 4736 KB |
2_32.txt | AC | 20 ms | 4608 KB |
2_33.txt | AC | 20 ms | 4608 KB |
2_34.txt | AC | 21 ms | 4608 KB |
2_35.txt | AC | 23 ms | 4608 KB |
2_36.txt | AC | 18 ms | 4608 KB |
2_37.txt | AC | 16 ms | 4608 KB |
2_38.txt | AC | 15 ms | 4608 KB |
2_39.txt | AC | 16 ms | 4608 KB |
2_40.txt | AC | 17 ms | 4608 KB |
2_41.txt | AC | 16 ms | 4608 KB |
2_42.txt | AC | 16 ms | 4608 KB |
2_43.txt | AC | 15 ms | 4608 KB |