#include <bits/stdc++.h>
#define int long long
#define MULTITEST false
using namespace std;
const int INF = 1e18;
vector<int> vp;
vector<vector<int>> roads;
int res = 0;
int compute (int node, int parent) {
int cnt = 0;
for (int next : roads[node]) if (next != parent)
cnt += compute(next, node);
cnt += vp[node];
vp[node] = 0;
if (cnt == 0) cnt ++;
if ((cnt & 1) == 0) res ++;
res ++;
return cnt;
}
void solve () {
int N, Q; cin >> N >> Q;
vp.resize(N);
roads.resize(N);
vector<int> deg(N);
for (int i = 1; i < N; i ++) {
int a, b;
cin >> a >> b;
a --; b --;
roads[a].push_back(b);
roads[b].push_back(a);
deg[a] ++; deg[b] ++;
}
int root = 0;
for (; root < N; root ++)
if (deg[root] != 1)
break ;
for (int i = 0; i < Q; i ++) {
int d;
cin >> d;
for (int j = 0; j < d; j ++) {
int x;
cin >> x;
x --;
vp[x] ++;
}
res = 0;
int nl = compute(root, -1);
if ((nl) & 1) cout << -1 << "\n";
else cout << (d + res - 2) << "\n";
}
}
signed main () {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int T = 1;
if (MULTITEST) cin >> T;
for (int t = 0; t < T; t ++) solve();
}
# | 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... |