Submission #1167804

#TimeUsernameProblemLanguageResultExecution timeMemory
1167804dion324September (APIO24_september)C++20
0 / 100
1 ms324 KiB
#include <bits/stdc++.h> #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define endl "\n" #define all(x) (x).begin(), (x).end() using ll = long long; using namespace std; int solve(int N, int M, vector<int> F, vector<vector<int>> S) { vector<vector<int>> tree(N); vector<int> indegree(N, 0); for (int i = 1; i < N; i++) { tree[F[i]].push_back(i); indegree[i]++; } queue<int> q; for (int i = 1; i < N; i++) { if (indegree[i] == 0) q.push(i); } unordered_map<int, int> volunteer_pos[M]; for (int i = 0; i < M; i++) { for (int j = 0; j < N - 1; j++) { volunteer_pos[i][S[i][j]] = j; } } auto is_valid = [&](int days) { vector<int> order(N - 1, -1); queue<int> temp_q = q; int day = 0; while (!temp_q.empty() && day < days) { int size = temp_q.size(); vector<int> today; while (size--) { int node = temp_q.front(); temp_q.pop(); today.push_back(node); } sort(all(today), [&](int a, int b) { int min_pos_a = N, min_pos_b = N; for (int i = 0; i < M; i++) { min_pos_a = min(min_pos_a, volunteer_pos[i][a]); min_pos_b = min(min_pos_b, volunteer_pos[i][b]); } return min_pos_a < min_pos_b; }); for (int x : today) order[x] = day; for (int x : today) { int parent = F[x]; indegree[parent]--; if (indegree[parent] == 0 && parent != 0) temp_q.push(parent); } day++; } for (int i = 0; i < M; i++) { for (int j = 1; j < N - 1; j++) { if (order[S[i][j]] < order[S[i][j - 1]]) return false; } } return true; }; int lo = 1, hi = N - 1, ans = 1; while (lo <= hi) { int mid = (lo + hi) / 2; if (is_valid(mid)) { ans = mid; lo = mid + 1; } else { hi = mid - 1; } } 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...