Submission #1234978

#TimeUsernameProblemLanguageResultExecution timeMemory
1234978t_hollSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1095 ms11844 KiB

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