#include "september.h"
#include <bits/stdc++.h>
using namespace std;
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
vector<vector<int> > pref_sizes(M, vector<int>(N - 1));
vector<vector<int> > wher_is(M, vector<int>(N));
for (int i = 0; i < M; i++) {
for (int j = 0; j < N - 1; j++)
wher_is[i][S[i][j]] = j;
}
vector<bool> is_same(N);
for (int i = 0; i < N - 1; i++) {
int max_val = i;
for (int j = 0; j < M; j++) {
pref_sizes[j][i] = wher_is[j][S[0][i]];
if (i > 0)
pref_sizes[j][i] = max(pref_sizes[j][i], pref_sizes[j][i - 1]);
max_val = max(max_val, pref_sizes[j][i]);
}
if (max_val == i)
is_same[i] = true;
}
vector<int> indeg(N, 0);
vector<bool> tbd(N);
for (int i = 1; i < N; i++)
indeg[F[i]]++;
int tbd_cnt = 0; int out = 0;
for (int i = 0; i < N - 1; i++) {
int me = S[0][i];
tbd[me] = true;
tbd_cnt++;
while (indeg[me] == 0 and tbd[me]) {
tbd[me] = false;
tbd_cnt--;
me = F[me];
indeg[me]--;
}
if (tbd_cnt == 0 and is_same[i])
out++;
}
return out;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |