Submission #556685

#TimeUsernameProblemLanguageResultExecution timeMemory
556685hoanghq2004Spring cleaning (CEOI20_cleaning)C++14
16 / 100
1086 ms30168 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree <T, null_type, less <T>, rb_tree_tag, tree_order_statistics_node_update>; const int N = 1e5 + 10; int n, q, ans; set <int> g[N]; int sz[N]; void dfs(int u, int p) { if (g[u].size() <= 1 && p) { sz[u] = 1; return; } sz[u] = 0; for (auto v: g[u]) { if (v == p) continue; dfs(v, u); sz[u] += sz[v]; ans += (sz[v] % 2 ? 1 : 2); } } void solve() { int m; cin >> m; for (int i = 1; i <= m; ++i) { int u; cin >> u; g[u].insert(i + n); g[i + n].insert(u); } int leaves = 0; for (int i = 1; i <= n + m; ++i) if (g[i].size() <= 1) ++leaves; if (leaves % 2 == 0) { dfs(1, 0); cout << ans << '\n'; } else cout << -1 << '\n'; for (int u = n + 1; u <= n + m; ++u) { for (auto v: g[u]) g[v].erase(u); g[u].clear(); } ans = 0; } int main() { ios :: sync_with_stdio(0); cin.tie(0); cin >> n >> q; for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; g[u].insert(v); g[v].insert(u); } while (q--) solve(); }
#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...