Submission #1367941

#TimeUsernameProblemLanguageResultExecution timeMemory
1367941KALARRYSeptember (APIO24_september)C++17
59 / 100
96 ms20756 KiB
//chockolateman

#include<bits/stdc++.h>
#include "september.h"

using namespace std;

int n,m,pos[100005][5],need[100005][5];
vector<int> adj[100005];

void dfs(int v,int p)
{
    for(int i = 0 ; i < m ; i++)
        need[v][i] = pos[v][i];
    for(auto u : adj[v])
        if(u != p)
        {
            dfs(u,v);
            for(int i = 0 ; i < m ; i++)
                need[v][i] = max(need[v][i],need[u][i]);
        }
}

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	n = N;
    m = M;
    for(int i = 1 ; i <= N-1 ; i++)
    {
        adj[i].push_back(F[i]);
        adj[F[i]].push_back(i);
    }
    for(int i = 0 ; i < M ; i++)
        for(int j = 0 ; j < N-1 ; j++)
            pos[S[i][j]][i] = j;
    dfs(0,0);
    int cur_pos[5] = {0,0,0,0,0};
    int lim[5] = {0,0,0,0,0};
    int ans = 0;
    while(cur_pos[0] < N-1)
    {

        for(int i = 0 ; i < M ; i++)
            lim[i] = max(lim[i],need[S[i][cur_pos[i]]][i]);
        bool good = true;
        for(int i = 0 ; i < M ; i++)
            if(cur_pos[i] < lim[i])
                good = false;
        if(good)
            ans++;
        for(int i = 0 ; i < M ; i++)
            cur_pos[i]++;
    }
    for(int i = 0 ; i < N ; i++)
        adj[i].clear();
    return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...