Submission #1159337

#TimeUsernameProblemLanguageResultExecution timeMemory
1159337adiyerSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1098 ms26696 KiB
#include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define pb push_back #define fi first #define se second using namespace std; typedef long long ll; const int MAXN = 200005; int n, q, ans, sz; int u[MAXN], v[MAXN], dp[MAXN]; vector < int > g[MAXN], adj[MAXN]; void dfs(int v, int p){ if(g[v].size() == 1) dp[v] = 1; else dp[v] = 0; for(int u : g[v]){ if(u == p) continue; dfs(u, v); } for(int u : g[v]){ if(u == p) continue; dp[v] += dp[u]; } if(v == 1) dp[v] = 0; while(dp[v] > 2) dp[v] -= 2; ans += dp[v]; // cout << "vertex: " << v << " dp: " << dp[v] << '\n'; } signed main(){ cin >> n >> q, sz = n; for(int i = 1; i < n; i++) cin >> u[i] >> v[i], adj[u[i]].pb(v[i]), adj[v[i]].pb(u[i]); while(q--){ for(int i = 1; i <= sz; i++) g[i].clear(); for(int i = 1; i <= n; i++) g[i] = adj[i]; int d, x, cnt = 0; cin >> d, sz = n, ans = 0; while(d--) cin >> x, sz++, g[x].pb(sz), g[sz].pb(x); for(int i = 1; i <= sz; i++) if(g[i].size() == 1) cnt++; if(cnt % 2){ cout << "-1\n"; continue; } ans = 0, dfs(1, 1); cout << ans << '\n'; } } /* g++ cleaning.cpp -o program.exe program.exe 7 3 1 2 2 4 4 5 5 6 5 7 3 4 1 4 2 2 4 1 1 */
#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...