257842026-03-02 18:42:17abcdSzállításcpp17Elfogadva 40/4014ms1624 KiB
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
#define pb push_back

const int maxn=20001;
vector<int> radj[maxn];
int adj[maxn],cnt;
bool vis[maxn];

void dfs(int v,int dis,vector<pii>& d){
    d[v]={dis,v};
    for(int u:radj[v])dfs(u,dis+1,d);
}

void up(int v){
    vis[v]=true;
    cnt++;
    if(!vis[adj[v]])up(adj[v]);
}

int main(){
    int n,k;cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>adj[i];
        radj[adj[i]].pb(i);
    }
    vector<pii> d(n+1),c(n+1);
    dfs(1,0,d);
    sort(d.begin(),d.end());
    vis[1]=true;
    for(int i=n;i>0;i--){
        if(!vis[d[i].second]){
            cnt=0;
            up(d[i].second);
            c[i]={cnt,d[i].second};
        }
    }
    sort(c.begin(),c.end());
    vector<int> ans;
    int total=0;
    for(int i=n;i>n-k;i--){
        ans.pb(c[i].second);
        total+=c[i].first;
    }
    cout<<total<<'\n';
    for(int x:ans)cout<<x<<' ';cout<<'\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/01ms820 KiB
2Elfogadva0/04ms820 KiB
3Elfogadva2/21ms1004 KiB
4Elfogadva2/22ms820 KiB
5Elfogadva2/21ms820 KiB
6Elfogadva2/22ms1012 KiB
7Elfogadva2/22ms820 KiB
8Elfogadva2/22ms908 KiB
9Elfogadva2/22ms820 KiB
10Elfogadva2/22ms820 KiB
11Elfogadva2/23ms820 KiB
12Elfogadva2/24ms820 KiB
13Elfogadva2/24ms1076 KiB
14Elfogadva2/24ms1084 KiB
15Elfogadva2/24ms964 KiB
16Elfogadva2/26ms1048 KiB
17Elfogadva3/37ms1076 KiB
18Elfogadva3/37ms1076 KiB
19Elfogadva3/314ms1624 KiB
20Elfogadva3/314ms1588 KiB