#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> adj_list;
vector<int> p;
vector<int> dp;
vector<int> dpl;
vector<bool> leaf;
vector<bool> e;
int sol;
void dfs (int v) {
dp[v] = 0;
dpl[v] = 0;
int cnt = 0;
for (auto &it : adj_list[v]) {
if (it == p[v]) continue;
cnt++;
p[it] = v;
dfs(it);
dpl[v] += dpl[it];
dp[v] += 2 - (dpl[it] % 2);
dp[v] += dp[it];
}
if (cnt == 0) dpl[v]++;
if (cnt == 1 && p[v] == -1) dpl[v]++;
leaf[v] = cnt == 0;
e[v] = dpl[v] % 2;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, q;
cin >> n >> q;
adj_list = vector<vector<int>> (n);
for (int i = 0; i < n-1; i++) {
int u, v;
cin >> u >> v;
adj_list[u-1].push_back(v-1);
adj_list[v-1].push_back(u-1);
}
vector<vector<int>> va (q);
for (int i = 0; i < q; i++) {
int d;
cin >> d;
for (int j = 0; j < d; j++) {
int a;
cin >> a;
va[i].push_back(a-1);
}
}
p = vector<int> (n, -1);
dp = vector<int> (n, 0);
dpl = vector<int> (n, 0);
e = vector<bool> (n, false);
leaf = vector<bool> (n, false);
vector<int> nleafs (n, 0);
dfs(0);
sol = dp[0];
int leafs = dpl[0];
for (int i = 0; i < q; i++) {
for (auto &it : va[i]) {
int cur = it;
bool nl = !leaf[it] || nleafs[it] > 0;
nleafs[it]++;
if (!nl) {
continue;
}
while (cur != -1) {
dpl[cur]++;
if (cur != 0) {
if (e[cur]) sol++;
else sol--;
e[cur] = !e[cur];
}
cur = p[cur];
}
}
if (dpl[0] % 2 == 1) cout << "-1\n";
else cout << sol + va[i].size() << "\n";
for (auto &it : va[i]) {
int cur = it;
bool nl = !leaf[it] || nleafs[it] > 1;
nleafs[it]--;
if (!nl) {
continue;
}
while (cur != -1) {
dpl[cur]--;
if (cur != 0) {
if (e[cur]) sol++;
else sol--;
e[cur] = !e[cur];
}
cur = p[cur];
}
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |