Submission #1270526

#TimeUsernameProblemLanguageResultExecution timeMemory
1270526goldencheemsSpring cleaning (CEOI20_cleaning)C++20
9 / 100
41 ms12332 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fti(i, x, y) for (int i = x; i <= y; ++i) #define F first #define S second const int MA = 1e5 + 10; int n, q, in[MA], D[MA], dp[MA]; bool leaf[MA], s1 = 1; vector <int> c[MA], con[MA], con1[MA]; void sub1() { int leaves = n - 1; fti(Q, 1, q) { unordered_map <int, int> mp; int cnt = leaves, res = n - 1; for (int x : c[Q]) { ++mp[x]; if (mp[x] > 1) ++cnt; } if (cnt & 1) { cout << -1 << '\n'; continue; } res = n + D[Q] - 1; for (auto x : mp) { int f = x.S; res += (f - 1) % 2; } cout << res << '\n'; } } int sz[MA]; void dfs(ll u, ll p) { dp[u] = leaf[u]; for (int v : con1[u]) { if (v == p) continue; dfs(v, u); dp[u] += (dp[v] - 1) % 2; } } void sub2() { int root = 0; fti(i, 1, n) if (!leaf[i]) { root = i; break; } fti(Q, 1, q) { int cnt = accumulate(leaf + 1, leaf + n + 1, 0); ll nd = n; fti(i, 1, n) con1[i].clear(); fti(i, 1, n) for (int x : con[i]) con1[i].push_back(x); unordered_map <int, int> mp; for (int x : c[Q]) { con1[++nd].push_back(x); con1[x].push_back(nd); if (mp[x] > 1) ++cnt; } if (cnt & 1) { cout << -1 << '\n'; continue; } fti(i, 1, n + D[Q]) dp[i] = 0; dfs(root, 0); cout << dp[root] << '\n'; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q; fti(i, 1, n - 1) { int u, v; cin >> u >> v; ++in[u], ++in[v]; con[u].push_back(v); con[v].push_back(u); } fti(i, 1, q) { cin >> D[i]; fti(j, 1, D[i]) { int x; cin >> x; c[i].push_back(x); s1 &= (x != 1); } } fti(i, 1, n) leaf[i] = (in[i] == 1); // cerr << accumulate(leaf + 1, leaf + n + 1, 0); if (s1 && in[1] == n - 1) sub1(); // else // sub2(); return 0; } /** 5 3 1 2 1 3 1 4 1 5 9 3 3 4 4 4 5 5 5 5 7 2 2 3 3 3 5 5 2 2 2 7 3 1 2 2 4 4 5 5 6 5 7 3 4 1 4 2 2 4 1 1 7 3 1 2 2 4 4 5 5 6 5 7 3 4 4 1 1 2 6 3 6 6 2 2 2 7 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...