Submission #1159337

#TimeUsernameProblemLanguageResultExecution timeMemory
1159337adiyerSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1098 ms26696 KiB
#include <bits/stdc++.h>

#define all(x) x.begin(), x.end()
#define pb push_back
#define fi first
#define se second

using namespace std;

typedef long long ll;

const int MAXN = 200005;

int n, q, ans, sz;
int u[MAXN], v[MAXN], dp[MAXN];

vector < int > g[MAXN], adj[MAXN];

void dfs(int v, int p){
    if(g[v].size() == 1) dp[v] = 1;
    else dp[v] = 0;
    for(int u : g[v]){
        if(u == p) continue;
        dfs(u, v);
    }
    for(int u : g[v]){
        if(u == p) continue;
        dp[v] += dp[u];
    }
    if(v == 1) dp[v] = 0;
    while(dp[v] > 2) dp[v] -= 2;
    ans += dp[v];
    // cout << "vertex: " << v << " dp: " << dp[v] << '\n';
}

signed main(){
    cin >> n >> q, sz = n;
    for(int i = 1; i < n; i++) cin >> u[i] >> v[i], adj[u[i]].pb(v[i]), adj[v[i]].pb(u[i]);
    while(q--){
        for(int i = 1; i <= sz; i++) g[i].clear();
        for(int i = 1; i <= n; i++) g[i] = adj[i];
        int d, x, cnt = 0; cin >> d, sz = n, ans = 0;
        while(d--) cin >> x, sz++, g[x].pb(sz), g[sz].pb(x);
        for(int i = 1; i <= sz; i++)
            if(g[i].size() == 1)
                cnt++;
        if(cnt % 2){
            cout << "-1\n"; 
            continue;
        }
        ans = 0, dfs(1, 1);
        cout << ans << '\n';
    }
}

/* 
g++ cleaning.cpp -o program.exe
program.exe
7 3
1 2
2 4
4 5
5 6
5 7
3 4
1 4
2 2 4
1 1

*/
#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...