Submission #1220389

#TimeUsernameProblemLanguageResultExecution timeMemory
1220389trimkusBeech Tree (IOI23_beechtree)C++20
9 / 100
2096 ms71492 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) { vector<int> res(N); vector<vector<int>> adj(N); for (int i = 1; i < N; ++i) { adj[P[i]].push_back(i); } auto dfs = [&](auto& dfs, int i, int p) -> vector<int> { vector<int> vert; for (auto& u : adj[i]) { if (u == p) continue; for (auto j : dfs(dfs, u, i)) { vert.push_back(j); } } auto seq = vert; sort(begin(seq), end(seq)); // cerr << i << " = "; // for (auto& u : seq) { // cerr << u << " "; // } // cerr << "\n"; do { vector<int> now = seq; now.insert(now.begin(), i); map<int, int> cnt; bool ok = true; for (auto& j : seq) { if (now[cnt[C[j]]] != P[j]) { ok = false; break; } cnt[C[j]] += 1; } if (ok) { res[i] = 1; break; } } while (next_permutation(begin(seq), end(seq))); vert.push_back(i); return vert; }; dfs(dfs, 0, -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...