제출 #1235255

#제출 시각아이디문제언어결과실행 시간메모리
1235255inesfiSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1096 ms26436 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define endl "\n"

const int TAILLEMAXI=200*1000+2;
int nbnoeuds,nbquest;
vector<int> adja[TAILLEMAXI];
vector<int> nouv[TAILLEMAXI];
int racine;

pair<int,int> dp(int a,int vient){ // nb feuilles, cout
    if (nouv[a].size()==1){
        return {1,1};
    }
    pair<int,int> total={0,0};
    for (auto v:nouv[a]){
        if (v!=vient){
            pair<int,int> enfant=dp(v,a);
            total.first+=enfant.first;
            total.second+=enfant.second;
        }
    }
    if (a!=racine){
        if (total.first%2==1){
            return {1,total.second+1};
        }
        return {2,total.second+2};
    }
    return total;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>nbnoeuds>>nbquest;
    for (int i=0;i<nbnoeuds-1;i++){
        int a,b;
        cin>>a>>b;
        a--;
        b--;
        adja[a].push_back(b);
        adja[b].push_back(a);
    }
    racine=-1;
    int indice=0;
    while (racine==-1){
        if (adja[indice].size()!=1){
            racine=indice;
        }
        indice++;
    }
    for (int i=0;i<nbquest;i++){
        int enplus;
        cin>>enplus;
        for (int j=0;j<nbnoeuds+enplus;j++){
            nouv[j]=adja[j];
        }
        for (int j=0;j<enplus;j++){
            int val;
            cin>>val;
            nouv[val-1].push_back(nbnoeuds+j);
            nouv[nbnoeuds+j].push_back(val-1);
        }
        int nbfeuilles=0;
        for (int j=0;j<nbnoeuds+enplus;j++){
            if (nouv[j].size()==1){
                nbfeuilles++;
            }
        }
        if (nbfeuilles%2==1){
            cout<<-1<<endl;
        }
        else {
            cout<<dp(racine,-1).second<<endl;
        }
    }
    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...