Submission #1245631

#TimeUsernameProblemLanguageResultExecution timeMemory
1245631mountainsaltSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1096 ms25156 KiB
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int mod=1e9+7;
const int N=2e5+5;

int n,q,ans;
bool leaf[N];
vector<vector<int>> adja(N), adj(N);

int dfs2(int u,int p){
    int leav=leaf[u];
    for(auto v:adj[u]){
        if(v==p) continue;
        int x=dfs2(v,u);
        ans+=2-(x%2);
        leav+=x;
    }
    return leav;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> q;
    for(int i=1; i<n; i++){
        int u, v;
        cin >> u >> v;
        adja[u].emplace_back(v);
        adja[v].emplace_back(u);
    }
    int __=1;
    while(__++<=q){
        int d;
        cin >> d;
        ans=0;
        adj=adja;
        int id=n;
        for(int i=0; i<d; i++){
            int u;
            cin >> u;
            adj[u].emplace_back(++id);
            adj[id].emplace_back(u);
        }
        int rt=1;
        for(int i=id; i>=1; i--){
            if(adj[i].size()==1) leaf[i]=true;
            else rt=i,leaf[i]=false;
        }
        int error=dfs2(rt,rt);
        if(error%2) cout << -1 << "\n";
        else cout << ans << "\n";
    }
}
#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...