Submission #1220417

#TimeUsernameProblemLanguageResultExecution timeMemory
1220417trimkusBeech Tree (IOI23_beechtree)C++20
0 / 100
80 ms58948 KiB
#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C)
{
    set<int> level1;
    int col = -1;
    vector<int> res(N, 1);
    vector<vector<int>> adj(N);
    for (int i = 1; i < N; ++i) {
        adj[P[i]].push_back(i);
    }
    vector<int> ord;
    auto dfs = [&](auto& dfs, int v) -> void {
        set<int> col;
        for (auto& u : adj[v]) {
            col.insert(C[u]);
            if (v == 0) {
                ord.push_back(u);
            }
            dfs(dfs, u);
        }
        if (adj[v].size() != col.size()) {
            res[v] = 0;
        }
    };
    dfs(dfs, 0);
    sort(begin(ord), end(ord));
    ord.erase(unique(begin(ord), end(ord)), end(ord));
    vector<int> cnt(M + 1);
    for (int i : ord) cnt[C[i]] += 1;
    // for (int i : ord) {
    //     cerr << i << " ";
    // }
    // cerr << "\n";
    int need = 1;
    for (int i : ord) {
        for (int j : adj[i]) {
            // cerr << C[j] << " = " << cnt[C[j]] << "\n";
            if (cnt[C[j]] != need) {
                res[0] = 0;
                return res;
            }
            cnt[C[j]] += 1;
        }
        if ((int)adj[i].size() > 0) need += 1;
    }
    return res;
}
#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...