Submission #658312

#TimeUsernameProblemLanguageResultExecution timeMemory
658312KahouSpring cleaning (CEOI20_cleaning)C++14
34 / 100
1092 ms13980 KiB
#include<bits/stdc++.h> using namespace std; #define F first #define S second #define endl '\n' typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int N = 1e5 + 50; int n, q, sub[N], ans; bool om[N], mark[N]; vector<int> adj[N]; void dfs(int u, int p) { for (int v:adj[u]) { if (v == p) continue; dfs(v, u); sub[u] += sub[v]; ans += 1-(sub[v]&1); } } void solve() { cin >> n >> q; for (int i = 1; i <= n-1; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } int r = 0; for (int u = 1; u <= n; u++) { if(adj[u].size() > 1) { if (!r) r = u; } else { om[u] = 1; } } for (int u = 1; u <= n; u++) { mark[u] = om[u]; sub[u] = om[u]; } while (q--) { int d; cin >> d; for (int i = 1; i <= d; i++) { int u; cin >> u; sub[u]++; if (mark[u]) { sub[u]--; mark[u] = 0; } } dfs(r, 0); cout << (sub[r]&1? -1: n+d-1+ans) << endl; for (int u = 1; u <= n; u++) { mark[u] = om[u]; sub[u] = om[u]; } ans = 0; } } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); solve(); 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...