제출 #1141107

#제출 시각아이디문제언어결과실행 시간메모리
1141107OI_AccountSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1096 ms18760 KiB
#pragma GCC optimize("O2,unroll-loops,Ofast") #include <bits/stdc++.h> using namespace std; const int N = 200'000; int n, q, d, deg[N + 10]; int sz[N + 10], ans; vector<int> adj[N + 10]; void readInput() { cin >> n >> q; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (int i = 1; i <= n; i++) deg[i] = adj[i].size(); } void dfs(int u = 1, int par = 0) { sz[u] = (adj[u].size() == 1); for (auto v: adj[u]) if (v != par) { dfs(v, u); sz[u] += sz[v]; } if (par) ans += 1 + (sz[u] % 2 == 0); } void query() { cin >> d; for (int i = 1; i <= d; i++) { int u = n + i, v; cin >> v; adj[u].push_back(v); adj[v].push_back(u); } int all = 0; for (int i = 1; i <= n + d; i++) if (adj[i].size() == 1) all++; if (all % 2) cout << -1 << '\n'; else { ans = 0; dfs(); cout << ans << '\n'; } for (int i = 1; i <= n; i++) while (deg[i] != adj[i].size()) { int v = adj[i].back(); adj[i].pop_back(); adj[v].pop_back(); } } void solveSub4() { while (q--) query(); cout.flush(); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); readInput(); solveSub4(); 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...