| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 966383 | anton | Spring cleaning (CEOI20_cleaning) | C++17 | 1033 ms | 11328 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
typedef complex<int> point;
const int MAX_N = 100000;
vector<vector<int>> adj;
vector<int> parity;
vector<int> anc;
vector<int> cost = {2, 1};
int total_cost= 0;
int count_leaves(int u, int a){
    int s= 0;
    for(auto v: adj[u]){
        if(v!=a){
            anc[v] = u;
            s+=count_leaves(v, u);
        }
    }
    if(s==0){
        s=1;
    }
    total_cost+= cost[s%2];
    
    //cout<<u+1<<" "<<s<<endl;
    parity[u] = s%2;
    return s%2;
}
void flip(int u){
    //cout<<"flip "<<u+1<<endl;
    total_cost -= cost[parity[u]];
    parity[u] ^= 1;
    total_cost+=cost[parity[u]];
    if(anc[u]!=-1){
        flip(anc[u]);
    }
}
signed main(){
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
    int n, k;
    cin>>n>>k;
    adj.resize(n);
    parity.resize(n);
    anc.resize(n, -1);
    int node = 0;
    int deg=  0;
    for(int i = 0; i<n-1; i++){
        int a, b;
        cin>>a>>b;
        a--;b--;
        adj[a].push_back(b);
        adj[b].push_back(a);
        if(adj[a].size()>deg){
            node =a;
            deg = adj[a].size();
        }
        if(adj[b].size()>deg){
            node =b;
            deg = adj[b].size();
        }
    }
    
    int r=count_leaves(node, -1);
    //cout<<"base "<<total_cost<<endl;
    for(int i = 0; i<k; i++){
        int d;
        cin>>d;
        vector<int> parents;
        for(int j = 0; j<d; j++){
            int v;
            cin>>v;
            v--;
            parents.push_back(v);
            adj[parents.back()].push_back(adj.size());
            total_cost++;
            if(adj[parents.back()].size()>2){
                flip(parents.back());
                r^=1;
            }
        }
        if(r%2==1){
            cout<<-1<<endl;
        }
        else{
            cout<<total_cost-2<<endl;
        }
        
        adj.resize(n);
        for(auto e: parents){
            if(adj[e].size()>2){
                flip(e);
                r^=1;
            }
            total_cost--;
            adj[e].pop_back();
        }
    }
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
