제출 #1232773

#제출 시각아이디문제언어결과실행 시간메모리
1232773antonn참나무 (IOI23_beechtree)C++20
0 / 100
232 ms62952 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; 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; for (auto v : g[u]) for (auto x : g[v]) down.insert(col[x]); if (cnt > 2 && down.size() > 1) 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...