#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define all(x) x.begin(), x.end()
#define ins insert
#define F first
#define S second
const int N = 4e5 + 7, mod = 998244353;
vector<int>g[N];
int tin[N], tout[N], eul[N], timer, d[N], c[N];
map<int, int>mp[N];
void dfs(int v, int p){
tin[v] = ++timer;
mp[d[v]][c[v]]++;
eul[tin[v]] = v;
for(auto to : g[v]){
if(to == p) continue;
d[to] = d[v] + 1;
dfs(to, v);
}
tout[v] = timer;
}
void solve(){
int n, k;
cin>>n>>k;
for(int i = 1; i <= n; i++){
cin>>c[i];
}
for(int i = 2; i <= n; i++){
int u;
cin>>u;
u++;
g[u].pb(i);
g[i].pb(u);
}
dfs(1, 1);
pair<int, int>ans = {0, 0};
for(int i = 1; i <= n; i++){
map<int, int>cnt;
int cur = 0;
for(int j = tin[i]; j <= tout[i]; j++){
cnt[d[eul[j]]]++;
if(c[eul[j]] == c[i]) cur++;
}
int sum = 0;
for(auto it : cnt){
sum += min(mp[it.F][c[i]], it.S);
}
cur = sum - cur;
if(sum > ans.F){
ans = {sum, cur};
}
else if(sum == ans.F){
ans.S = max(ans.S, cur);
}
}
cout<<ans.F<<' '<<ans.S<<'\n';
}
signed main(){
ios_base :: sync_with_stdio(false);
cin.tie(0);
//freopen("pieaters.in", "r", stdin);
//freopen("pieaters.out", "w", stdout);
int t = 1;
//cin>>t;
while(t--){
solve();
}
}
# | 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... |