Submission #1039381

#TimeUsernameProblemLanguageResultExecution timeMemory
1039381ZicrusBeech Tree (IOI23_beechtree)C++17
0 / 100
2100 ms1572 KiB
#include <bits/stdc++.h> #include "beechtree.h" using namespace std; typedef long long ll; void dfs(vector<vector<ll>> &adj, ll cur) { vector<ll> nxt; for (auto &e : adj[cur]) { dfs(adj, e); for (auto &j : adj[e]) { nxt.push_back(j); } } for (auto &j : nxt) { adj[cur].push_back(j); } } bool isBeautiful(int &n, int &m, vector<int> &p, vector<int> &c, vector<vector<ll>> &adj, ll root) { sort(adj[root].begin(), adj[root].end()); do { unordered_multiset<ll> numC; adj[root].insert(adj[root].begin(), root); for (auto &e : adj[root]) { if (e == root) continue; if (p[e] != adj[root][numC.count(c[e])]) goto skipThing; numC.insert(c[e]); } return true; skipThing: continue; } while (next_permutation(adj[root].begin(), adj[root].end())); return false; } vector<int> beechtree(int n, int m, vector<int> p, vector<int> c) { vector<int> res(n); vector<vector<ll>> adj(n); for (int i = 1; i < n; i++) { adj[p[i]].push_back(i); } dfs(adj, 0); for (int i = 0; i < n; i++) { res[i] = adj[i].empty() ? true : isBeautiful(n, m, p, c, adj, i); } 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...