Submission #1208917

#TimeUsernameProblemLanguageResultExecution timeMemory
1208917irmuunSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1096 ms19592 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

const ll N=2e5+5;

ll n,q,sub[N];
vector<ll>g[N];

void dfs(ll x,ll p){
    sub[x]=0;
    if(g[x].size()==1) sub[x]=1;
    for(ll y:g[x]){
        if(y!=p){
            dfs(y,x);
            sub[x]+=sub[y];
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin>>n>>q;
    for(ll i=1;i<n;i++){
        ll u,v;
        cin>>u>>v;
        g[u].pb(v);
        g[v].pb(u);
    }
    while(q--){
        ll d;
        cin>>d;
        vector<ll>a(d);
        for(ll i=0;i<d;i++){
            cin>>a[i];
            g[a[i]].pb(n+i+1);
            g[n+i+1].pb(a[i]);
        }
        ll root=0;
        for(ll i=1;i<=n+d;i++){
            if(g[i].size()>=2){
                root=i;
                break;
            }
        }
        dfs(root,root);
        if(sub[root]%2==1){
            cout<<-1<<"\n";
        }
        else{
            ll ans=n+d-2;
            for(ll i=1;i<=n+d;i++){
                if(sub[i]%2==0){
                    ans++;
                }
            }
            cout<<ans<<"\n";
        }
        for(ll i=d-1;i>=0;i--){
            g[a[i]].pop_back();
            g[n+i+1].pop_back();
        }
    }
}
#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...