Submission #1310165

#TimeUsernameProblemLanguageResultExecution timeMemory
1310165LudisseySpring cleaning (CEOI20_cleaning)C++20
34 / 100
1097 ms29452 KiB
#include <bits/stdc++.h> #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; const int MAX=1e5; vector<vector<int>> neigh; vector<vector<int>> neigh2; vector<int> parent; vector<int> depth; vector<int> val; int csum=0; int root=0; void dfs(int x, int p, int d){ parent[x]=p; depth[x]=d; val[x]=0; for (auto u : neigh[x]) { if(u==p) continue; dfs(u,x,d+1); val[x]+=val[u]; csum+=val[u]-1; } for (auto u : neigh2[x]) { if(u==p) continue; dfs(u,x,d+1); val[x]+=val[u]; } if(sz(neigh[x])+sz(neigh2[x])==1&&x!=root) { val[x]=1; } val[x]=2-val[x]%2; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,q; cin >> n >> q; neigh.resize(n+MAX); neigh2.resize(n+MAX); parent.resize(n+MAX,-1); val.resize(n+MAX,-1); depth.resize(n+MAX,-1); for (int i = 0; i < n-1; i++) { int u,v; cin >> u >> v; u--; v--; neigh[u].push_back(v); neigh[v].push_back(u); if(sz(neigh[u])>1) root=u; if(sz(neigh[v])>1) root=v; } for (int i = 0; i < q; i++) { int D; cin >> D; vector<int> d(D); for (int i = 0; i < D; i++) cin >> d[i]; for (int i = 0; i < D; i++) { neigh2[d[i]-1].push_back(i+n); neigh2[i+n].push_back(d[i]-1); } csum=n-1+D; dfs(root,-1,0); if(val[root]==1) cout << -1 << "\n"; else cout << csum << "\n"; for (int i = 0; i < D; i++) neigh2[d[i]-1].pop_back(),neigh2[n+i].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...