#include "september.h"
#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN=1e5+5;
int fw[MAXN],n;
vector<int> adj[MAXN];
int pre[MAXN],pos[MAXN],ss[MAXN],_ptr;
void add(int idx,int d){
for(++idx;idx<MAXN;idx+=idx&-idx)
fw[idx]+=d;
}
int sum(int idx){
int ret=0;
for(++idx;idx>0;idx-=idx&-idx)
ret+=fw[idx];
return ret;
}
int sum(int l,int r){ return sum(r)-sum(l-1); }
void dfs_init(int i){
pre[i]=++_ptr;
ss[i]=1;
for(auto&x:adj[i]){
dfs_init(x);
ss[i]+=ss[x];
}
pos[i]=_ptr;
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
// M = 1
for(int i=1;i<N;++i) adj[F[i]].emplace_back(i);
dfs_init(0);
memset(fw,0,sizeof fw);
int ans=0;
for(int i=0,j;i<N-1;i=j){
//cout<<i<<'\n';
int x=S[0][i];
++ans;
add(pre[x],1);
for(j=i+1;sum(pre[x],pos[x])<ss[x];++j){
//cout<<">> "<<sum(pre[x],pos[x])<<'\n';
if(j>=N) break;
add(pre[S[0][j]],1);
}
}
#ifdef DEBUG
for(int i=0;i<N;++i){
cout<<pos[i]<<" ";
cout<<sum(pre[i],pre[i])<<" ";
}
cout<<'\n';
#endif
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... |