Submission #1204228

#TimeUsernameProblemLanguageResultExecution timeMemory
1204228OmarAlimammadzade9월 (APIO24_september)C++20
100 / 100
110 ms16064 KiB
#include "september.h"
using namespace std;

const int N = 1e5;
vector<int> g[N];
int n, m, pos[N];

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

void clear() {
    for (int i = 0; i < n; i++) {
        g[i].clear();
        pos[i] = 0;
    }
}

int solve(int N, int M, vector<int> F, vector<vector<int>> S) {
    n = N, m = M;
    clear();
    int cnt[n], dif = 0;
    fill(cnt, cnt + n, 0);
    for (int i = 1; i < n; i++) {
        g[F[i]].push_back(i);
    }
    for (int i = 0; i < n - 1; i++) {
        pos[S[0][i]] = i;
    }
    dfs(0);
    int res = 0, cur = 0;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < m; j++) {
            dif += (!cnt[S[j][i]]);
            dif -= (++cnt[S[j][i]] == m);
        }
        cur = max(cur, pos[S[0][i]]);
        res += (cur <= i and !dif);
    }
    return res;
}
#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...