제출 #1203242

#제출 시각아이디문제언어결과실행 시간메모리
1203242AlgorithmWarrior9월 (APIO24_september)C++20
100 / 100
101 ms12480 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...