Submission #1193979

#TimeUsernameProblemLanguageResultExecution timeMemory
1193979zh_hSeptember (APIO24_september)C++20
0 / 100
1096 ms1114112 KiB
#include <bits/stdc++.h>
#define pb push_back
#define lint long long int
using namespace std;

// vector<int> mx, subtree_mx;
vector<int> mx;
vector<vector<int>> edge;
void dfs(int v) {
    // subtree_mx[v] = mx[v];
    for (auto i : edge[v]) {
        dfs(i);
        // subtree_mx[v] = max(subtree_mx[v], subtree_mx[i]);
        mx[v] = max(mx[v], mx[i]);
    }
}

int solve (int n, int m, vector<int> parent, vector<vector<int>> s) {
    edge.resize(n);
    for (int i = 1; i < n; i ++) {
        // edge[i].pb(parent[i]);
        edge[parent[i]].pb(i);
    }

    mx.resize(n, -1);
    for (int i = 0; i < m; i ++) {
        for (int j = 0; j < n-1; j ++) {
            mx[s[i][j]] = max(mx[s[i][j]], j);
        }
    }

    // subtree_mx.resize(n, 0);
    dfs(0);

    int cur_mx = 0;
    int cur_i = 0;
    int ans = 0;
    while (cur_i < n-1) {
        ans ++;
        cur_mx = cur_i;
        while (cur_i <= cur_mx) {
            cur_mx = max(cur_mx, mx[s[0][cur_i]]);
            cur_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...