제출 #1198674

#제출 시각아이디문제언어결과실행 시간메모리
1198674sheercoldSeptember (APIO24_september)C++20
100 / 100
131 ms15744 KiB
#include <bits/stdc++.h> using namespace std; using i64 = long long; int solve(int n, int m, std::vector<int> p, std::vector<std::vector<int>> s) { mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<vector<int>> tree(n); for (int i = 1; i < n; i++) { tree[p[i]].push_back(i); } vector<int> mx(n); for (int i = 0; i < m; i++) { for (int j = 0; j < n - 1; j++) { mx[s[i][j]] = max(mx[s[i][j]], j); } } auto dfs = [&](auto&& self, int v) -> void { for (int nxt : tree[v]) { if (nxt == p[v]) { continue; } self(self, nxt); mx[v] = max(mx[v], mx[nxt]); } }; dfs(dfs, 0); vector<int> R(n - 1); iota(R.begin(), R.end(), 0); for (int i = 0; i < m; i++) { for (int j = 0; j < n - 1; j++) { R[j] = max(R[j], mx[s[i][j]]); } } int ans = 0; for (int i = 0, r = 0; i < n - 1; i++) { r = max(r, R[i]); if (r <= i) { ++ans; } } 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...