Submission #1186108

#TimeUsernameProblemLanguageResultExecution timeMemory
1186108UnforgettableplSpring cleaning (CEOI20_cleaning)C++20
28 / 100
1096 ms12572 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int modulo = 1e9+7;


int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int N,Q;
    cin >> N >> Q;
    vector<vector<int>> adj(N+1);
    for(int i=1;i<N;i++){
        int u,v;cin>>u>>v;
        adj[u].emplace_back(v);
        adj[v].emplace_back(u);
    }
    vector<int> par(N+1);
    vector<int> status(N+1);
    vector<bool> isLeaf(N+1);
    int cntEven = 0;
    int root = 0;
    {
        function<int(int,int)> dfs = [&](int x,int p){
            int curr = 0;
            int children = 0;
            par[x]=p;
            for(int&i:adj[x])if(i!=p){curr^=dfs(i,x);children++;}
            if(children==0){curr=1;isLeaf[x]=true;}
            if(curr==0)cntEven++;
            status[x]=curr;
            return curr;
        };
        for(int i=1;i<=N;i++)if(adj[i].size()>1){
            dfs(i,0);
            root = i;
            break;
        }
    }
    auto flip = [&](int x){
        while(x){
            status[x]^=1;
            if(status[x])cntEven--;
            else cntEven++;
            x = par[x];
        }
    };
    vector<bool> isModified(N+1);
    for(int i=1;i<=Q;i++){
        int D;cin>>D;
        vector<int> updates(D);
        for(int&x:updates){
            cin >> x;
            if(isLeaf[x] and !isModified[x])isModified[x]=true;
            else flip(x);
        }
        if(status[root]==0)cout << cntEven+N+D-2 << '\n';
        else cout << "-1\n";
        for(int&x:updates){
            if(isLeaf[x] and isModified[x])isModified[x]=false;
            else flip(x);
        }
    }
}
#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...