Submission #1232781

#TimeUsernameProblemLanguageResultExecution timeMemory
1232781antonnBeech Tree (IOI23_beechtree)C++20
0 / 100
273 ms100544 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5 + 7; int n, m; vector<int> g[N]; int col[N], ok[N], par[N]; set<int> all; map<int, int> mp[N]; void dfs(int u) { for (auto v : g[u]) { dfs(v); } if (g[u].size() == 0) { ok[u] = 1; return; } if (u != 0) { set<int> children; for (auto v : g[u]) children.insert(col[v]); if (children.size() == g[u].size()) ok[u] = 1; } else { set<int> children; for (auto v : g[u]) children.insert(col[v]); if (children.size() != g[u].size()) ok[u] = 0; for (auto v : g[u]) if (ok[v] == 0) ok[u] = 0; if (children.size() != all.size()) ok[u] = 0; // ---------------------- int cnt = 0; for (auto v : g[u]) if (g[v].size() > 0) ++cnt; set<int> down; bool aux = 1; for (auto v : g[u]) for (auto x : g[v]) mp[v][col[x]]++; map<int, int> match; for (auto v : g[u]) { if (!mp[v].empty()) match = mp[v]; } for (int i = 1; i < g[u].size(); ++i) aux &= (mp[g[u][i]].empty() || mp[g[u][i]] == match); int x = -1; for (auto it : match) { if (x == -1) { x = it.second; } aux &= it.second == x; } if (cnt > 1 && !aux) ok[u] = 0; } } vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) { n = N; m = M; for (int i = 0; i < n; ++i) { par[i] = P[i]; if (i > 0) { g[P[i]].push_back(i); } } ok[0] = 1; map<int, int> f; for (int i = 0; i < n; ++i) { col[i] = C[i]; } for (int i = 1; i < n; ++i) { f[col[i]]++; all.insert(col[i]); } dfs(0); vector<int> ret(n); for (int i = 0; i < n; ++i) ret[i] = ok[i]; return ret; }
#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...