Submission #1211370

#TimeUsernameProblemLanguageResultExecution timeMemory
1211370omsincoconutBeech Tree (IOI23_beechtree)C++17
0 / 100
0 ms328 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; void dfs(int u, vector<vector<int>> &child, vector<int> &tin) { static int cte = 0; tin[u] = cte++; for (int v : child[u]) dfs(v, child, tin); } vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) { vector<int> ret(N); vector<vector<int>> child(N); for (int i = 1; i < N; i++) child[P[i]].push_back(i); vector<int> tin(N); dfs(0, child, tin); for (int i = 0; i < N; i++) { if (child[i].empty()) { ret[i] = true; continue; } map<int, vector<int>> P_C; stack<int> dt; dt.push(i); while (!dt.empty()) { int u = dt.top(); dt.pop(); if (u != i) P_C[P[u]].push_back(C[u]); for (int v : child[u]) dt.push(v); } bool can = true; vector<tuple<int, int, int, vector<int>>> sz_PC; for (auto [p, c] : P_C) { sort(c.begin(), c.end()); for (int j = 0; j < (int)c.size()-1; j++) { if (c[j] == c[j+1]) can = false; } sz_PC.emplace_back(c.size(), -tin[p], p, c); } if (!can) { ret[i] = can; continue; } sort(sz_PC.begin(), sz_PC.end()); reverse(sz_PC.begin(), sz_PC.end()); int tmp_idx = 0; while (get<2>(sz_PC[tmp_idx]) != i) tmp_idx++; swap(sz_PC[0], sz_PC[tmp_idx]); int cur = 0; vector<int> seq; for (auto [sz, tt, p, c] : sz_PC) { cur++; seq.push_back(p); } map<int, int> cnt2; for (int u : seq) { if (u == i) continue; can &= (seq[cnt2[C[u]]] == P[u]); cnt2[C[u]]++; } ret[i] = can; } 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...