Submission #701805

#TimeUsernameProblemLanguageResultExecution timeMemory
701805GrandTiger1729Spring cleaning (CEOI20_cleaning)C++17
34 / 100
1074 ms20884 KiB
#include <iostream>
#include <vector>
#include <functional>
using namespace std;

const int M = 1e5 + 10;
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n, q; cin >> n >> q;
    vector<vector<int>> g(n + M);
    for (int i = 0; i < n - 1; i++){
        int u, v; cin >> u >> v;
        u--, v--;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    long long ans = 0;
    vector<bool> vis(n + M);
    function<int(int)> dfs = [&](int u){
        if (u != 0 && g[u].size() == 1) return 1;
        vis[u] = 1;
        int ret = 0;
        for (auto &v: g[u]){
            if (vis[v]) continue;
            int res = dfs(v);
            ret += res;
        }
        ans += ret;
        ret = ret % 2 == 0? 2: 1;
        vis[u] = 0;
        return ret;
    };
    while (q--){
        int m; cin >> m;
        vector<int> a(m);
        for (int i = 0; i < m; i++){
            cin >> a[i];
            a[i]--;
        }
        for (int i = 0; i < m; i++){
            g[a[i]].push_back(n + i);
            g[n + i].push_back(a[i]);
        }
        ans = 0;
        int res = dfs(0);
        // cout << " --- " << res << ' ' << ans << endl;
        if (g[0].size() == 1)
            res--;
        cout << (res == 1? -1: ans) << '\n';
        for (int i = 0; i < m; i++){
            g[a[i]].pop_back();
            g[n + i].pop_back();
        }
    }
    return 0;
}
#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...