Submission #866003

#TimeUsernameProblemLanguageResultExecution timeMemory
866003boris_mihovSpring cleaning (CEOI20_cleaning)C++17
34 / 100
1095 ms17264 KiB
#include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> #include <queue> #include <stack> typedef long long llong; const int MAXN = 200000 + 10; const int MOD = 1e9 + 7; const int INF = 2e9; int n, q; std::vector <int> g[MAXN]; std::pair <int,int> dfs(int node, int par) { if (g[node].size() == 1) { return {0, 1}; } int cnt = 0; int cost = 0; for (const int &u : g[node]) { if (u == par) continue; auto [res, rem] = dfs(u, node); cost += res; if (rem == 0) { cnt += 2; cost += 2; } else { cnt += rem; cost += rem; } } return {cost, cnt & 1}; } int calc() { int root = 1; if (g[1].size() == 1) root = g[1][0]; if (g[root].size() == 1) return 1; auto [res, rem] = dfs(root, 0); if (rem == 0) return res; return -1; } int a[MAXN]; void solve() { for (int i = 1 ; i <= q ; ++i) { int d; int cnt = n; std::cin >> d; for (int j = 1 ; j <= d ; ++j) { std::cin >> a[j]; g[a[j]].push_back(++cnt); g[cnt].push_back(a[j]); } std::cout << calc() << '\n'; for (int j = 1 ; j <= d ; ++j) { g[a[j]].pop_back(); g[cnt--].pop_back(); } } } void input() { std::cin >> n >> q; for (int i = 2 ; i <= n ; ++i) { int u, v; std::cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } } void fastIOI() { std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); 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...