#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vii;
int solve(int n, int m, vector<int> f, vector<vector<int>> s)
{
vii children(n, vi());
for (int i = 1; i < n; i++)
children[f[i]].push_back(i);
vector<bool> done(n, false);
vector<pair<int, int>> earlyandlate(n - 1, pair<int, int>(make_pair(n, -1)));
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < m; j++)
{
int cur = s[j][i];
earlyandlate[cur-1].first = min(earlyandlate[cur-1].first, i);
earlyandlate[cur-1].second = max(earlyandlate[cur-1].second, i);
}
}
int threshold = 0, ans = 0;
for (int i = 0; i < n - 1; i++)
{
for (int l = 0; l < m; l++)
{
if (earlyandlate[s[l][i]-1].second > threshold)
{
for (int j = threshold + 1; j <= earlyandlate[s[l][i]-1].second; j++)
{
for (int k = 0; k < m; k++)
done[s[k][j]] = true;
}
threshold = earlyandlate[s[l][i]-1].second;
}
for (auto j : children[s[l][i]])
{
if (!done[j])
{
for (int k = max(i + 1, threshold + 1); k < n - 1; k++)
{
bool over = false;
for (int a = 0; a < m; a++)
{
done[s[a][k]] = true;
if (s[a][k] == j)
{
threshold = k;
over = true;
}
}
if (over)
break;
}
}
}
done[s[l][i]] = true;
}
if (i >= threshold)
ans++;
}
return ans;
}
# | 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... |