#include <bits/stdc++.h>
using namespace std;
int const MAX=1e5+5;
vector<int>fii[MAX];
void build_arbore(int n,vector<int>&tata){
int i;
for(i=1;i<n;++i){
int t=tata[i];
fii[t].push_back(i);
}
}
void clear_arbore(int n){
int i;
for(i=0;i<n;++i){
fii[i].clear();
}
}
bool viz[MAX];
void clear_viz(int n){
int i;
for(i=0;i<n;++i){
viz[i]=0;
}
}
int mxm(int a,int b){
return (a>b)?a:b;
}
int maxim;
int poz[7][MAX];
void get_poz(int m,int n,vector<vector<int>>&date){
int i,j;
for(i=0;i<m;++i){
for(j=0;j<n-1;++j){
poz[i][date[i][j]]=j;
}
}
}
void visit(int nod,int m){
for(auto fiu : fii[nod]){
if(!viz[fiu]){
visit(fiu,m);
}
}
viz[nod]=1;
int i;
for(i=0;i<m;++i){
maxim=mxm(maxim,poz[i][nod]);
}
}
int solve(int N, int M, vector<int> F,vector<vector<int>> S){
build_arbore(N,F);
get_poz(M,N,S);
maxim=0;
int i,j;
int cnt=0;
for(j=0;j<N-1;++j){
for(i=0;i<M;++i){
if(!viz[S[i][j]])
visit(S[i][j],M);
}
if(j==maxim){
++cnt;
}
}
clear_viz(N);
clear_arbore(N);
return cnt;
}
# | 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... |