Submission #1150728

#TimeUsernameProblemLanguageResultExecution timeMemory
1150728vladiliusSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1097 ms20480 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q; cin>>n>>q; vector<pii> ed; for (int i = 1; i < n; i++){ int u, v; cin>>u>>v; ed.pb({u, v}); } while (q--){ int d; cin>>d; int m = n + d; vector<int> g[m + 1], a(d + 1); for (auto [u, v]: ed){ g[u].pb(v); g[v].pb(u); } for (int i = 1; i <= d; i++){ cin>>a[i]; g[a[i]].pb(n + i); g[n + i].pb(a[i]); } int lf = 0; for (int i = 1; i <= m; i++){ lf += (g[i].size() == 1); } if (lf % 2){ cout<<-1<<"\n"; continue; } vector<int> f(m + 1); ll out = 0; function<void(int, int)> dfs = [&](int v, int pr){ if ((g[v].size() + !pr) == 1){ f[v] = 1; return; } int cc = 0; for (int i: g[v]){ if (i == pr) continue; dfs(i, v); cc += f[i]; } out += cc; f[v] = (cc % 2) ? 1 : 2; }; dfs(1, 0); cout<<out<<"\n"; } }
#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...