Submission #1202087

#TimeUsernameProblemLanguageResultExecution timeMemory
1202087randnt939월 (APIO24_september)C++20
0 / 100
1 ms324 KiB
#include "september.h" #include <algorithm> #include <iostream> #include <climits> #include <bitset> #include <vector> #include <set> int dfs(std::vector<int>& F, std::set<int>& leafs, int* depth, int n) { if (depth[n] != INT_MAX) return depth[n]; if (F[n] == -1) return 0; auto parent = leafs.find(F[n]); if (parent != leafs.end()) leafs.erase(parent); depth[n] = dfs(F, leafs, depth, F[n]) + 1; return depth[n]; } int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) { std::set<int> leafs; int depth[N]; for (int x = 0; x < N; x++) depth[x] = INT_MAX, leafs.insert(x); for (int x = 1; x < N; x++) dfs(F, leafs, depth, x); std::bitset<100005> rem; int days = 0; bool bad = 0; for (auto record: S) { std::sort(record.begin(), record.end(), [&] (int a, int b) { if (depth[a] == depth[b]) return a > b; return depth[a] > depth[b]; }); bool g = 1; for (int lf: record) { auto leaf = leafs.find(lf); if (leaf == leafs.end()) { g = 0; break; } if (F[lf] != -1) leafs.insert(F[lf]); N--; leafs.erase(leaf); } if (!g) { bad = 1; break; } days++; } if (!bad) return days + N; return days; }
#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...