Submission #1220422

#TimeUsernameProblemLanguageResultExecution timeMemory
1220422trimkusBeech Tree (IOI23_beechtree)C++20
9 / 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), [&](int x, int y) {
        return (int)adj[x].size() > (int)adj[y].size();
    });
    for (int i = 1; i < N; ++i) {
        if (res[i] == 0) {
            res[0] = 0;
            break;
        }
    }
    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]] << " ?= " << need << "\n";
            if (cnt[C[j]] != need) {
                res[0] = 0;
            }
           
        }
        for (auto j : adj[i]) {
            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...