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...