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...