Submission #1278609

#TimeUsernameProblemLanguageResultExecution timeMemory
1278609Bui_Quoc_CuongSeptember (APIO24_september)C++20
0 / 100
1095 ms560 KiB
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;

int n, m;
vector <int> g[maxn];
int s[10][maxn];
int far[10][maxn];
int max_node[maxn];

void dfs (int u) {
    for (int &v : g[u]) {
        dfs(v);
        max_node[u] = max(max_node[u], max_node[v]);
    }
}

int solve (int N, int M, vector <int> F, vector <vector <int>> S) {
    n = N;
    m = M;
    for (int i = 0; i < n; i++) {
        int u = F[i];
        if (u == - 1) continue;
        g[u].push_back(i);
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n - 1; j++) s[i][j] = S[i][j];
        for (int j = 0; j < n - 1; j++) max_node[s[i][j]] = max(max_node[s[i][j]], j);
    }
    dfs(0);

    int ans = 0, last = - 1;

    for (int i = 0; i < n - 1; i++) {
        if (last < i) ans++;

        for (int j = 0; j < m; j++) {
            last = max(last, max_node[s[j][i]]);
        }
    }

    return ans;
}
#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...