제출 #991297

#제출 시각아이디문제언어결과실행 시간메모리
991297amirhoseinfar13859월 (APIO24_september)C++17
100 / 100
331 ms29284 KiB
#include "september.h" #include<bits/stdc++.h> using namespace std; const int maxn=100000+10,maxm=6; int n,m,lnk[maxm][maxn],all[maxm][maxn],te[maxn]; vector<int>adj[maxn]; void clear(){ for(int i=0;i<m;i++){ for(int j=0;j<=n;j++){ lnk[i][j]=0; all[i][j]=0; te[j]=0; } } for(int j=0;j<=n;j++){ adj[j].clear(); } } int calt(int u=0,int ind=0){ int ret=te[u]; for(auto x:adj[u]){ ret=max(ret,calt(x)); } if(u!=0){ lnk[ind][te[u]]=ret; } return ret; } int res=0; void calc(){ for(int j=0;j<m;j++){ for(int i=0;i<n-1;i++){ te[all[j][i]]=i; } calt(0,j); } map<int,int>mp; set<int>st; int maxa=0; for(int i=0;i<n-1;i++){ for(int j=0;j<m;j++){ maxa=max(maxa,lnk[j][i]); st.insert(all[j][i]); mp[all[j][i]]++; if(mp[all[j][i]]==m){ st.erase(all[j][i]); } } //cout<<i<<" "<<maxa<<" "<<(int)st.size()<<endl; if(maxa<=i&&(int)st.size()==0){ res++; } } } int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) { n=N; m=M; res=0; for(int i=1;i<n;i++){ adj[F[i]].push_back(i); } for(int i=0;i<m;i++){ for(int j=0;j<n-1;j++){ all[i][j]=S[i][j]; } } calc(); clear(); return res; }
#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...