제출 #1148258

#제출 시각아이디문제언어결과실행 시간메모리
1148258Faisal_SaqibTeam Coding (EGOI24_teamcoding)C++20
0 / 100
11 ms23880 KiB
#include <bits/stdc++.h> using namespace std; const int N=1e6+10; vector<int> ma[N]; int h[N],sz[N],cnt[N],ans=0,color[N]; void dfs_sz(int x,int p=-1) { sz[x]=1; for(auto y:ma[x]) { if(y==p)continue; h[y]=h[x]+1; dfs_sz(y,x); sz[x]+=sz[y]; } } void adder(int x,int p) { cnt[color[x]]++; for(auto y:ma[x]) { if(y==p)continue; adder(y,x); } } void deleter(int x,int p) { cnt[color[x]]--; for(auto y:ma[x]) { if(y==p)continue; deleter(y,x); } } void dfs(int x,int p=-1,bool keep=0) { int big=-1; for(auto y:ma[x]) { if(y==p)continue; if(big==-1 or sz[big]<sz[y]) big=y; } for(auto y:ma[x]) { if(y==p or y==big)continue; dfs(y,x); } if(big!=-1) { dfs(big,x,1); } for(auto y:ma[x]) { if(y==p or y==big)continue; adder(y,x); } cnt[color[x]]++; ans=max(ans,cnt[color[x]]); if(!keep) { deleter(x,p); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k; cin>>n>>k; for(int i=0;i<n;i++)cin>>color[i]; for(int i=1;i<n;i++) { int x=i,y; cin>>y; // ma[x].push_back(y); ma[y].push_back(x); } h[1]=1; dfs_sz(1); dfs(1); cout<<ans<<' '<<0<<endl; }
#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...