제출 #1188424

#제출 시각아이디문제언어결과실행 시간메모리
1188424MatteoArcari참나무 (IOI23_beechtree)C++20
0 / 100
1 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<vector<int>> adj(n);
    for (int i = 1; i < n; i++) {
        adj[p[i]].push_back(i);
    }
    vector<int> ans(n);
    vector<int> maxD(n);
    vector<set<int>> col(n);
    auto dfs = [&](auto &&dfs, int i) -> void {
        for (int j: adj[i]) {
            dfs(dfs, j);
            maxD[i] = max(maxD[i], maxD[j] + 1);
            if (col[j].size() > col[i].size()) swap(col[i], col[j]);
        }
        for (int j: adj[i]) {
            for (int x: col[j]) {
                col[i].insert(x);
            }
        }
        if (maxD[i] == 0) {
            ans[i] = 1;
        }
        if ((maxD[i] == 1 || maxD[i] == 2) && adj[i].size() == col[i].size()) {
            ans[i] = 1;
        }
    }; dfs(dfs, 0);
    return ans;
}
#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...