#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |