Submission #1211383

#TimeUsernameProblemLanguageResultExecution timeMemory
1211383omsincoconutBeech Tree (IOI23_beechtree)C++17
0 / 100
0 ms328 KiB
#include "beechtree.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
    vector<int> ret(N);

    vector<vector<int>> child(N);
    for (int i = 1; i < N; i++) child[P[i]].push_back(i);
    
    vector<int> maxdeg(N);
    vector<vector<int>> have(N, vector<int>(2, 0));
    for (int i = N-1; i >= 0; i--) {
        ret[i] = true;

        for (int v : child[i]) {
            maxdeg[i] = max(maxdeg[i], maxdeg[v]);
            have[i][0] += have[v][0];
            have[i][1] += have[v][1];
        }

        if (maxdeg[i] >= 2 || child[i].size() > 2) ret[i] = false;

        maxdeg[i] = max(maxdeg[i], (int)child[i].size());

        if (maxdeg[i] == 2) {
            vector<int> sp = {0, 0};
            for (int v : child[i]) sp[C[v]-1]++;
            if (have[i][0] > sp[0] && have[i][1] > sp[1]) ret[i] = false;
        } else {
            if (have[i][0] > 0 && have[i][1] > 0) ret[i] = false;
        }

        if (i != 0) have[i][C[i]-1]++;
    }

    return ret;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...