#include "september.h"
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
int posi[100005];
vector<int> adj[100005];
void dfs(int u) {
	for(int v:adj[u]) {
		dfs(v);
		posi[u] = max(posi[u], posi[v]);
	}
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	adj[0].clear();
	for(int i=1;i<N;i++) {
		posi[i] = 1e9;
		adj[i].clear();
	}
	for(int i=0;i<M;i++) for(int j=0;j<N-1;j++) {
		posi[S[i][j]] = min(posi[S[i][j]], j);
	}
	vector<pii> ord;
	for(int i=1;i<N;i++) {
		ord.push_back({posi[i], i});
		adj[F[i]].push_back(i);
	}
	sort(ord.begin(), ord.end());
	for(int i=0;i<M;i++) for(int j=0;j<N-1;j++) {
		posi[S[i][j]] = max(posi[S[i][j]], j);
	}
	dfs(0);
	int day = 0, cur = -1;
	for(auto [p, u]:ord) {
		if(p>cur) day++;
		cur = max(cur, posi[u]);
	}
	return day;
}
| # | 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... |