#include <bits/stdc++.h>
using namespace std;
int N, M;
vector<int> F, was;
vector<vector<int>> S;
bool check(int k) {
for(int i = 0; i < M; i++) {
vector<int> sigma;
for(int x : S[i]) {
sigma.push_back(was[x]);
}
vector<int> cmp;
for(int x : sigma) {
if (cmp.empty()) cmp.push_back(x);
else if(cmp.back() != x) cmp.push_back(x);
}
int sx = cmp.size();
if(sx != k) return false;
for(int j = 0; j < k; j++) {
if (cmp[j] != j + 1) return false;
}
}
return true;
}
bool idk(int i, int k) {
if(i == N) {
vector<int> wass(k + 1);
for(int j = 1; j < N; j++) {
wass[was[j]] = 1;
}
for(int j = 1; j <= k; j++) {
if (!wass[j]) return false;
}
return check(k);
}
int l = 1, r = 0;
if(F[i] == 0) {
r = k;
} else {
r = was[F[i]] - 1;
}
for(int j = l; j <= r; j++) {
was[i] = j;
if(idk(i + 1, k)) return true;
}
return false;
}
int solvee(int N_, int M_, vector<int>& F_, vector<vector<int>>& S_) {
N = N_;
M = M_;
F = F_;
S = S_;
was.resize(N);
for(int i = 0; i < N; i++) {
was[i] = 0;
}
for(int i = N - 1; i > 0; i--) {
was[0] = i + 1;
if(idk(1, i)) return i;
}
return 1;
}
int solve(int N, int M, vector<int> F, vector<vector<int>> S) {
return solvee(N, M, F, S);
}
# | 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... |