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