#include <bits/stdc++.h>
using namespace std;
const int N = 110000;
vector<int> g[N];
int pos[N], p[N], k[N];
void dfs(int v, int t = (int)(1e9)) {
if (v != 0) {
t = min(t, pos[v]);
p[t]++;
p[pos[v]]--;
}
for (int u : g[v])
dfs(u, t);
}
int solve(int n, int m, vector<int> f, vector<vector<int>> s) {
for (int i = 0; i < n; i++) {
p[i] = 0;
g[i].clear();
}
for (int i = 1; i <= n - 1; i++)
g[f[i]].push_back(i);
for (int i = 0; i < m; i++) {
pos[0] = (int)(1e9);
for (int j = 0; j + 1 < n; j++)
pos[s[i][j]] = j;
dfs(0);
}
for (int i = 1; i < n; i++)
p[i] += p[i - 1];
for (int i = 0; i < n; i++)
k[i] = 0;
int ans = 0, cnt0 = n, cntm = 0;
for (int i = 0; i + 1 < n; i++) {
for (int j = 0; j < m; j++) {
k[s[j][i]]++;
if (k[s[j][i]] == 1)
cnt0--;
if (k[s[j][i]] == m)
cntm++;
}
if (cnt0 + cntm == n && p[i] == 0)
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... |