제출 #1349007

#제출 시각아이디문제언어결과실행 시간메모리
134900712345678Team Coding (EGOI24_teamcoding)C++20
23 / 100
22 ms8684 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=2e3+5;

int n, k, p, a[nx], lvl[nx], cnt[nx], cnt2[nx], info[nx][nx];
vector<int> adj[nx], g[nx];
pair<int, int> res;

void predfs(int u, int p)
{
    if (u!=p) lvl[u]=lvl[p]+1;
    info[lvl[u]][a[u]]++;
    for (auto v:adj[u]) predfs(v, u);
}

void dfs(int u, int rt)
{
    cnt[lvl[u]]++;
    if (a[u]==a[rt]) cnt2[lvl[u]]++;
    for (auto v:adj[u]) dfs(v, rt);
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>k;
    for (int i=0; i<n; i++) cin>>a[i], g[a[i]].push_back(i);
    for (int i=1; i<n; i++) cin>>p, adj[p].push_back(i);
    predfs(0, 0);
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n; j++) cnt[j]=cnt2[j]=0;
        dfs(i, i);
        int pts=1, sw=0;
        for (int j=lvl[i]+1; j<=n; j++) 
        {
            pts+=cnt2[j];
            int lft=cnt[j]-cnt2[j];
            sw+=min(lft, info[j][a[i]]-cnt2[j]);
            pts+=min(lft, info[j][a[i]]-cnt2[j]);
        }
        res=max(res, {pts, -sw});
    }
    cout<<res.first<<' '<<-res.second;
}
#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...