Submission #1367969

#TimeUsernameProblemLanguageResultExecution timeMemory
1367969KALARRYSeptember (APIO24_september)C++17
100 / 100
89 ms19092 KiB
//chockolateman

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

using namespace std;

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

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

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]] = max(pos[S[i][j]],j);
    dfs(0,0);
    int cur_pos = 0;
    int lim = 0;
    int ans = 0;
    while(cur_pos < N-1)
    {

        for(int i = 0 ; i < M ; i++)
            lim = max(lim,need[S[i][cur_pos]]);
        if(cur_pos==lim)
            ans++;
        cur_pos++;
    }
    for(int i = 0 ; i < N ; i++)
    {
        adj[i].clear();
        pos[i] = 0;
    }
    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...