# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
993467 | THXuan | September (APIO24_september) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "september.h"
#include "september.h"
#include <bits/stdc++.h>
#define INF 1e18
using namespace std;
typedef long long ll;
vector<int>adj[100005];
int dp[100005];
void dfs(int s, int e){
for(auto u : adj[s]){
if(u==e) continue;
dfs(u, s);
dp[s] = max(dp[s], dp[u]);
}
}
ll solve(int N, int M, vector<int> F, vector<vector<int>>S) {
for(int i = 0;i<N;i++){
adj[i].clear();
}
for(int i =1; i < N;i++){
adj[i].push_back(F[i]);
adj[F[i]].push_back(i);
//cout << i << " "<< F[i] << "\n";
}
ll ans = INF;
for(int c = 0;c<M;c++){
for(int i =0;i<S[c].size();i++){
dp[S[c][i]]=i;
}
dfs(0, -1);
ll anss = 0; int i=0;
while(i < S[c].size()){
int j = dp[S[c][i]];
int maxn = dp[S[c][i]];
int k = i;
while(k <= maxn){
maxn = max(maxn, dp[S[c][k]]);
++k;
}
++ans;
i = maxn + 1;
}
ans = min(ans, anss);
}
return ans;
}