#include"september.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int) (x).size()
#define endl '\n'
int tmin[200005]={}, tmax[200005], child[200005];
vector<int> adj[200005];
bool cor[200005]={}, vis[200005]={};
void calc(int N, vector<int> a)
{
for(int i = 0;i <= N;i++) vis[i]=0;
int cnt=0;
for(int i = 0;i < N-1;i++)
{
int u=a[i];
vis[u]=1;
tmin[u]=min(tmin[u], i);
tmax[u]=max(tmax[u], i);
cnt+=child[u];
for(auto v : adj[u])
{
if(vis[v]) cnt--;
}
cor[i]&=(cnt==0);
}
}
int solve(int N, int M, std::vector<int> F,
std::vector<std::vector<int>> S)
{
for(int i=0;i<N;i++)
{
adj[i].clear();
cor[i]=1;
tmax[i]=-1;
tmin[i]=N+1;
child[i]=0;
}
for(int i = 1;i < N;i++)
{
adj[F[i]].pb(i);
adj[i].pb(F[i]);
child[F[i]]++;
}
for(auto asd : S) calc(N, asd);
int pref[N+5]={};
for(int i = 1;i < N;i++)
{
pref[tmin[i]]--;
pref[tmax[i]]++;
}
int cur=0, ans=1;
for(int i = 0;i<N-2;i++)
{
cur+=pref[i];
if(cur==0&&cor[i]) 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... |