| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1299279 | AksLolCoding | September (APIO24_september) | C++17 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
void dfs(vector <vector<int>>& child,vector<int>& maxpos, int u){
for (int i=0; i<child[u].size(); i++){
dfs(child,maxpos,child[u][i]);
maxpos[u]=max(maxpos[u],maxpos[child[u][i]]);
}
}
int solve(int n, int m, const vector<int> &v1, const vector<vector<int>> &v2){
vector <int> maxpos(n);
vector <vector<int>> child(n);
for (int i=1; i<n; i++){
child[v1[i]].push_back(i);
}
for (int j=0; j<m; j++){
for (int i=0; i<n-1; i++){
maxpos[v2[j][i]]=max(maxpos[v2[j][i]],i);
}}
dfs(child,maxpos,0);
int ans=0,cur=-1;
for (int i=0; i<n-1; i++){
if (cur<i)ans++;
for (int j=0; j<m; j++){
cur=max(cur,maxpos[v2[j][i]]);
}}
return ans;
}
