Submission #1211314

#TimeUsernameProblemLanguageResultExecution timeMemory
1211314omsincoconutBeech Tree (IOI23_beechtree)C++17
9 / 100
2097 ms66312 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; 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); 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, 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(), 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<1>(sz_PC[tmp_idx]) != i) tmp_idx++; swap(sz_PC[0], sz_PC[tmp_idx]); map<int, int> cnt; int cur = 0; vector<int> seq; for (auto [sz, p, c] : sz_PC) { for (int j : c) { if (cnt[j] < cur) can = false; cnt[j]++; } 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...