Submission #1232737

#TimeUsernameProblemLanguageResultExecution timeMemory
1232737antonnBeech Tree (IOI23_beechtree)C++20
8 / 100
133 ms75456 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> s[N]; int sz[N], d[N]; void dfs(int u) { sz[u] = 1; for (auto v : g[u]) { dfs(v); sz[u] += sz[v]; d[v] = s[v].size(); s[u].insert(col[v]); if (s[u].size() < s[v].size()) swap(s[u], s[v]); for (auto x : s[v]) s[u].insert(x); s[v].clear(); } set<int> children; for (auto v : g[u]) children.insert(col[v]); if (children.size() == s[u].size() && g[u].size() == s[u].size()) { int rem = sz[u] - 1 - g[u].size(); if (rem == 0) ok[u] = 1; for (auto v : g[u]) { if (d[v] == rem) { ok[u] = 1; } } } } 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); } } for (int i = 0; i < n; ++i) { col[i] = C[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...