Submission #1172620

#TimeUsernameProblemLanguageResultExecution timeMemory
1172620Troll321Spring cleaning (CEOI20_cleaning)C++20
34 / 100
1097 ms17992 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MAXN = 2e5 + 5; ll n, q, cnt, root, query[MAXN]; bool parity[MAXN]; vector<ll> adjl[MAXN]; void dfs(ll now, ll par, ll* ans) { parity[now] = 0; bool isLeaf = (adjl[now].size() == 1); if(isLeaf) {parity[now] = 1;} else { for(ll nxt : adjl[now]) { if(nxt == par) {continue ;} dfs(nxt, now, ans); parity[now] ^= parity[nxt]; } } if(parity[now] == 0) {(*ans)++;} } void solve() { ll ans = cnt-1; dfs(root, root, &ans); if(parity[root] == 1) { cout << "-1\n"; return ; } cout << (ans-1) << "\n"; return ; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> q; cnt = n; for (int i = 0; i < n-1; ++i) { ll a, b; cin >> a >> b; adjl[a].push_back(b); adjl[b].push_back(a); if(adjl[a].size() > 1) {root = a;} else if(adjl[b].size() > 1) {root = b;} } while(q--) { // Input ll d; cin >> d; for (int i = 0; i < d; ++i) { cin >> query[i]; cnt++; adjl[cnt].push_back(query[i]); adjl[query[i]].push_back(cnt); } solve(); // Reset for (int i = 0; i < d; ++i) { adjl[n+i+1].clear(); adjl[query[i]].pop_back(); } cnt = n; } 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...