#include <bits/stdc++.h>
#define int long long
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
using namespace std;
const int MAX=1e5;
vector<vector<int>> neigh;
vector<vector<int>> neigh2;
vector<int> parent;
vector<int> depth;
vector<int> val;
int csum=0;
int root=0;
void dfs(int x, int p, int d){
parent[x]=p;
depth[x]=d;
val[x]=0;
for (auto u : neigh[x])
{
if(u==p) continue;
dfs(u,x,d+1);
val[x]+=val[u];
csum+=val[u]-1;
}
for (auto u : neigh2[x])
{
if(u==p) continue;
dfs(u,x,d+1);
val[x]+=val[u];
}
if(sz(neigh[x])+sz(neigh2[x])==1&&x!=root) {
val[x]=1;
}
val[x]=2-val[x]%2;
}
signed main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int n,q; cin >> n >> q;
neigh.resize(n+MAX);
neigh2.resize(n+MAX);
parent.resize(n+MAX,-1);
val.resize(n+MAX,-1);
depth.resize(n+MAX,-1);
for (int i = 0; i < n-1; i++)
{
int u,v; cin >> u >> v; u--; v--;
neigh[u].push_back(v);
neigh[v].push_back(u);
if(sz(neigh[u])>1) root=u;
if(sz(neigh[v])>1) root=v;
}
for (int i = 0; i < q; i++)
{
int D; cin >> D;
vector<int> d(D);
for (int i = 0; i < D; i++) cin >> d[i];
for (int i = 0; i < D; i++)
{
neigh2[d[i]-1].push_back(i+n);
neigh2[i+n].push_back(d[i]-1);
}
csum=n-1+D;
dfs(root,-1,0);
if(val[root]==1) cout << -1 << "\n";
else cout << csum << "\n";
for (int i = 0; i < D; i++) neigh2[d[i]-1].pop_back(),neigh2[n+i].pop_back();
}
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... |