#include <bits/stdc++.h>
#define pb push_back
#define lint long long int
using namespace std;
// vector<int> mx, subtree_mx;
vector<int> mx;
vector<vector<int>> edge;
void dfs(int v, int p) {
// subtree_mx[v] = mx[v];
for (auto i : edge[v]) {
if (i == p) continue;
dfs(i, v);
// subtree_mx[v] = max(subtree_mx[v], subtree_mx[i]);
mx[v] = max(mx[v], mx[i]);
}
}
int solve (int n, int m, vector<int> parent, vector<vector<int>> s) {
edge.resize(n);
for (int i = 1; i < n; i ++) {
edge[i].pb(parent[i]);
edge[parent[i]].pb(i);
}
mx.resize(n, -1);
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);
}
}
// subtree_mx.resize(n, 0);
dfs(0, -1);
int cur_mx = 0;
int cur_i = 0;
int ans = 0;
while (cur_i < n-1) {
ans ++;
cur_mx = cur_i;
while (cur_i <= cur_mx) {
cur_mx = max(cur_mx, mx[s[0][cur_i]]);
cur_i ++;
}
}
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... |