제출 #1058022

#제출 시각아이디문제언어결과실행 시간메모리
1058022Ignut참나무 (IOI23_beechtree)C++17
5 / 100
42 ms14452 KiB
/* Ignut started: 14.08.2024 now: 14.08.2024 ████████████████████████████████████████████████████████████████████ ████████████████████████████████ ████████████████████████████████ ██████████████████████████████ ██████████████████████████████ ██████ ██████████████████ ██████████████████ ██████ ██████ ██████████████ ██████████████ ██████ ██████ ██ ████████████ ████████████ ██ ██████ ██████ ████ ██████████ ██████████ ████ ██████ ██████ ████ ██████████ ██████████ ████ ██████ ██████ ████ ██████████ ██████████ ██████ ██████ ██████ ██████ ██████████ ██████████ ██████ ██████ ██████ ██████ ████████ ████████ ██████ ██████ ██████ ██████ ██████ ██████ ██████ ██████ ██████ ████ ████ ████ ████ ██████ ██████ ██████████ ████ ██████████ ██████ ██████ ██ ██████ ████████ ██████ ██ ██████ ██████ ██████ ████████ ██████ ██████ ██████ ██ ██ ██████ ██████████████████████ ████ ████ ██████████████████████ ████████████████████████ ██ ██ ████████████████████████ ██████████████████████████ ██████████████████████████ ██████████████████████████████ ██████████████████████████████ ████████████████████████████████████████████████████████████████████ */ #include <bits/stdc++.h> using namespace std; using ll = long long; const int MAXN = 2e5 + 123; int n; vector<int> tree[MAXN]; vector<int> p; vector<int> c; vector<int> res; int cnt[MAXN] = {}; bool Check(vector<int> &lst, int root) { // if (root == 4) { // cout << root << " :\n"; // } sort(lst.begin(), lst.end()); do { bool ok = true; for (int v : lst) { int par = cnt[c[v]]; int vert = (par == 0 ? root : lst[par - 1]); // if (root == 4) { // cout << v << " -> " << par << ", "; // } if (p[v] != vert) { ok = false; break; } cnt[c[v]] ++; } // if (root == 4) { // cout << '\n'; // } for (int v : lst) cnt[c[v]] = 0; if (ok) return true; } while (next_permutation(lst.begin(), lst.end())); return false; } vector<int> dfs(int v) { vector<int> lst = {}; for (int to : tree[v]) if (to != p[v]) for (int u : dfs(to)) lst.push_back(u); res[v] |= Check(lst, v); lst.push_back(v); return lst; } vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) { n = N; p = P; c = C; res.assign(N, 0); int cntEq = 1; for (int i = n - 2; i >= 0; i --) { if (C[i] != C[i + 1]) break; cntEq ++; } cntEq = min(cntEq + 1, N); for (int i = N - 1; i >= N - cntEq; i --) res[i] = 1; // for (int i = 1; i < N; i ++) { // tree[i].push_back(P[i]); // tree[P[i]].push_back(i); // } // dfs(0); 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...