제출 #1242537

#제출 시각아이디문제언어결과실행 시간메모리
1242537bangan참나무 (IOI23_beechtree)C++20
0 / 100
2097 ms62792 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define ALL(a) a.begin(), a.end() vector<int> beechtree(int n, int m, vector<int> p, vector<int> c) { vector<vector<int>> adj(n); for (int i=1; i<n; i++) adj[p[i]].pb(i); vector<int> ans(n), h(n); auto dfs = [&](auto self, int v) -> vector<int> { vector<int> sub{v}; for (auto u : adj[v]) { h[u] = h[v]+1; auto vec = self(self, u); for (auto it : vec) sub.pb(it); } do { if (sub[0] != v) continue; bool valid = true; for (int i=1; i<sub.size(); i++) { int f=0; for (int j=1; j<i; j++) f += c[sub[i]]==c[sub[j]]; if (sub[f] != p[sub[i]]) valid = false; } for (int i=0; i+1 < sub.size(); i++) if (h[sub[i]] > h[sub[i+1]]) valid = false; if (valid) ans[v] = 1; } while (next_permutation(ALL(sub))); return sub; }; dfs(dfs, 0); return ans; }
#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...