#include "september.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1;;
const int INF = INT_MAX;
vector < int > adj[N];
int idx[N] , sub[N] , arc[N];
int cur_idx = 0;
void dfs(int v , int p)
{
sub[v] = 1;
idx[v] = ++cur_idx;
arc[idx[v]] = v;
for(int u : adj[v])
{
if(u != p)
{
dfs(u , v);
sub[v] += sub[u];
}
}
}
bool is_anc(int u , int v)
{
if(idx[v] >= idx[u] && idx[u] + sub[u] - 1 >= idx[v]) return true;
return false;
}
void fix(int n)
{
for(int i = 0;i <= n;i++) adj[i].clear() , idx[i] = 0 , sub[i] = 0;
cur_idx = 0;
}
int solve(int n , int m , vector < int > F , vector < vector < int > > S)
{
for(int i = 1;i <= n - 1;i++)
{
adj[i].push_back(F[i]);
adj[F[i]].push_back(i);
}
dfs(0 , -1);
int res = 0;
vector < vector < int > > cur(m);
vector < vector < int > > next(m , vector < int > (n + 1 , INF));
for(int i = 0;i < m;i++)
{
set < int > st;
for(int v = 1;v <= n - 1;v++) st.insert(idx[v]);
for(int j = 0;j < S[i].size();j++)
{
int l = idx[S[i][j]];
int r = idx[S[i][j]] + sub[S[i][j]] - 1;
if(!st.size()) break;
if(l > *st.rbegin()) continue;
auto it = st.lower_bound(l);
vector < int > rm;
while(it != st.end())
{
int fi = *it;
if(fi <= r)
{
next[i][arc[fi]] = j;
rm.push_back(fi);
}
else break;
it++;
}
for(int ind : rm) st.erase(ind);
}
}
for(int i = 0;i < S[0].size();i++)
{
for(int j = 0;j < m;j++) cur[j].push_back(S[j][i]);
for(int j = 0;j < m;j++) sort(cur[j].begin() , cur[j].end());
set < vector < int > > st;
for(int j = 0;j < m;j++) st.insert(cur[j]);
if(st.size() != 1) continue;
bool can = 1;
for(int j = 0;j < m;j++)
{
int mn = INF;
for(int k = i + 1;k < S[j].size();k++)
{
mn = min(mn , next[j][S[j][k]]);
}
if(mn <= i) can = 0;
}
if(can)
{
++res;
for(int j = 0;j < m;j++) cur[j].clear();
}
}
fix(n);
return res;
}
# | 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... |