Submission #977404

#TimeUsernameProblemLanguageResultExecution timeMemory
977404OAleksaSpring cleaning (CEOI20_cleaning)C++14
34 / 100
1082 ms27740 KiB
#include <bits/stdc++.h> #define f first #define s second using namespace std; const int N = 4e5 + 69; int n, q, ch[N], par[N]; vector<int> g[N]; void dfs(int v, int p) { par[v] = p; for (auto u : g[v]) { if (u == p) continue; dfs(u, v); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> q; for (int i = 1;i <= n - 1;i++) { int a, b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } dfs(1, 0); while (q--) { int t; cin >> t; int a[t]; for (int i = 0;i < t;i++) { cin >> a[i]; g[a[i]].push_back(n + i + 1); g[n + i + 1].push_back(a[i]); } function<void(int, int)> calc = [&](int v, int p) { if (g[v].size() == 1) ch[v] = 1; else ch[v] = 0; for (auto u : g[v]) { if (u == p) continue; calc(u, v); ch[v] += ch[u]; } }; calc(1, 0); int uk = 0; for (int i = 1;i <= n + t;i++) uk += (g[i].size() == 1); if (uk % 2 == 1) cout << "-1\n"; else { int ans = 0; for (int i = 2;i <= n + t;i++) ans += (ch[i] % 2 == 0 ? 2 : 1); cout << ans << '\n'; } for (int i = 0;i < t;i++) { g[a[i]].pop_back(); assert(g[n + i + 1].size() == 1); g[n + i + 1].pop_back(); } } 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...