Submission #1217131

#TimeUsernameProblemLanguageResultExecution timeMemory
1217131anonymous321Spring cleaning (CEOI20_cleaning)C++20
28 / 100
1095 ms16924 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> adj_list; vector<int> p; vector<int> dp; vector<int> dpl; vector<bool> leaf; vector<bool> e; int sol; void dfs (int v) { dp[v] = 0; dpl[v] = 0; int cnt = 0; for (auto &it : adj_list[v]) { if (it == p[v]) continue; cnt++; p[it] = v; dfs(it); dpl[v] += dpl[it]; dp[v] += 2 - (dpl[it] % 2); dp[v] += dp[it]; } if (cnt == 0) dpl[v]++; if (cnt == 1 && p[v] == -1) dpl[v]++; leaf[v] = cnt == 0; e[v] = dpl[v] % 2; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; adj_list = vector<vector<int>> (n); for (int i = 0; i < n-1; i++) { int u, v; cin >> u >> v; adj_list[u-1].push_back(v-1); adj_list[v-1].push_back(u-1); } vector<vector<int>> va (q); for (int i = 0; i < q; i++) { int d; cin >> d; for (int j = 0; j < d; j++) { int a; cin >> a; va[i].push_back(a-1); } } p = vector<int> (n, -1); dp = vector<int> (n, 0); dpl = vector<int> (n, 0); e = vector<bool> (n, false); leaf = vector<bool> (n, false); vector<int> nleafs (n, 0); dfs(0); sol = dp[0]; int leafs = dpl[0]; for (int i = 0; i < q; i++) { for (auto &it : va[i]) { int cur = it; bool nl = !leaf[it] || nleafs[it] > 0; nleafs[it]++; if (!nl) { continue; } while (cur != -1) { dpl[cur]++; if (cur != 0) { if (e[cur]) sol++; else sol--; e[cur] = !e[cur]; } cur = p[cur]; } } if (dpl[0] % 2 == 1) cout << "-1\n"; else cout << sol + va[i].size() << "\n"; for (auto &it : va[i]) { int cur = it; bool nl = !leaf[it] || nleafs[it] > 1; nleafs[it]--; if (!nl) { continue; } while (cur != -1) { dpl[cur]--; if (cur != 0) { if (e[cur]) sol++; else sol--; e[cur] = !e[cur]; } cur = p[cur]; } } } return 0; }
#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...