Submission #1228629

#TimeUsernameProblemLanguageResultExecution timeMemory
1228629eyadoozSeptember (APIO24_september)C++20
100 / 100
100 ms15268 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...