Submission #1278610

#TimeUsernameProblemLanguageResultExecution timeMemory
1278610Bui_Quoc_CuongSeptember (APIO24_september)C++20
100 / 100
109 ms17464 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]]);
        }
    }
    for (int i = 0; i < n; i++) {
        max_node[i] = 0;
        g[i].clear();
    }
    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...