답안 #558067

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
558067 2022-05-06T16:46:47 Z status_coding Spring cleaning (CEOI20_cleaning) C++14
9 / 100
455 ms 14736 KB
#include <bits/stdc++.h>

using namespace std;

int n,q,sz,root;
int cntEven;

int nrLeaf[100005];
int aux[100005];

int parV[100005];
vector<int> v[100005];

vector<int> upd;

void dfs(int p, int par)
{
    parV[p] = par;

    nrLeaf[p] = 0;

    for(int it : v[p])
    {
        if(it == par)
            continue;

        dfs(it, p);
        nrLeaf[p] += nrLeaf[it];
    }

    nrLeaf[p] += aux[p];

    if(!nrLeaf[p])
        nrLeaf[p] = 1;

    if(nrLeaf[p] % 2 == 0)
        cntEven++;
}

void solveBig(int k, vector<int> &upd)
{
    for(int it : upd)
        aux[it] ++;

    cntEven=0;
    dfs(root, 0);

    if(nrLeaf[root] % 2)
        cout<<"-1\n";
    else
        cout<<n+k-1 + cntEven-1<<'\n';

    for(int i=1;i<=n;i++)
        aux[i] = 0;

    cntEven=0;
    dfs(root, 0);
}

void add(int p)
{
    nrLeaf[p]++;

    if(nrLeaf[p] % 2 == 0)
        cntEven++;
    else
        cntEven--;
}

void del(int p)
{
    nrLeaf[p]--;

    if(nrLeaf[p] % 2 == 0)
        cntEven++;
    else
        cntEven--;
}

void solveSmall(int k, vector<int> &upd)
{
    for(int it : upd)
        add(it);

    if(nrLeaf[root] % 2)
        cout<<"-1\n";
    else
        cout<<n+k-1 + cntEven-1<<'\n';

    for(int it : upd)
        del(it);
}

int main()
{
    cin>>n>>q;
    sz = sqrt((int)1e5);
    //sz=0;

    for(int i=1;i<n;i++)
    {
        int x, y;
        cin>>x>>y;

        v[x].push_back(y);
        v[y].push_back(x);
    }

    for(int i=1;i<=n;i++)
        if((int)v[i].size() >= 2)
            root = i;

    cntEven=0;
    dfs(root, 0);

    while(q)
    {
        q--;

        upd.clear();

        int k;
        cin>>k;

        for(int i=1;i<=k;i++)
        {
            int x;
            cin>>x;

            upd.push_back(x);
        }

        if(k >= sz)
            solveBig(k, upd);
        else
            solveSmall(k, upd);
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2656 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 3500 KB Output is correct
2 Correct 22 ms 3472 KB Output is correct
3 Correct 56 ms 7456 KB Output is correct
4 Correct 77 ms 6536 KB Output is correct
5 Correct 86 ms 7856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 4036 KB Output is correct
2 Correct 23 ms 3924 KB Output is correct
3 Correct 85 ms 14736 KB Output is correct
4 Correct 109 ms 14084 KB Output is correct
5 Incorrect 67 ms 13260 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 455 ms 4052 KB Output is correct
2 Incorrect 25 ms 3668 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 184 ms 6124 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 293 ms 7420 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2656 KB Output isn't correct
2 Halted 0 ms 0 KB -