Submission #1186108

#TimeUsernameProblemLanguageResultExecution timeMemory
1186108UnforgettableplSpring cleaning (CEOI20_cleaning)C++20
28 / 100
1096 ms12572 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int modulo = 1e9+7; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N,Q; cin >> N >> Q; vector<vector<int>> adj(N+1); for(int i=1;i<N;i++){ int u,v;cin>>u>>v; adj[u].emplace_back(v); adj[v].emplace_back(u); } vector<int> par(N+1); vector<int> status(N+1); vector<bool> isLeaf(N+1); int cntEven = 0; int root = 0; { function<int(int,int)> dfs = [&](int x,int p){ int curr = 0; int children = 0; par[x]=p; for(int&i:adj[x])if(i!=p){curr^=dfs(i,x);children++;} if(children==0){curr=1;isLeaf[x]=true;} if(curr==0)cntEven++; status[x]=curr; return curr; }; for(int i=1;i<=N;i++)if(adj[i].size()>1){ dfs(i,0); root = i; break; } } auto flip = [&](int x){ while(x){ status[x]^=1; if(status[x])cntEven--; else cntEven++; x = par[x]; } }; vector<bool> isModified(N+1); for(int i=1;i<=Q;i++){ int D;cin>>D; vector<int> updates(D); for(int&x:updates){ cin >> x; if(isLeaf[x] and !isModified[x])isModified[x]=true; else flip(x); } if(status[root]==0)cout << cntEven+N+D-2 << '\n'; else cout << "-1\n"; for(int&x:updates){ if(isLeaf[x] and isModified[x])isModified[x]=false; else flip(x); } } }
#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...