257832026-03-02 18:25:55abcdSzállításcpp17Hibás válasz 18/4014ms1732 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,i};
        }
    }
    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
base18/40
1Elfogadva0/02ms820 KiB
2Hibás válasz0/04ms1076 KiB
3Részben helyes1/21ms840 KiB
4Részben helyes1/22ms1004 KiB
5Részben helyes1/22ms820 KiB
6Részben helyes1/22ms820 KiB
7Részben helyes1/22ms820 KiB
8Részben helyes1/23ms820 KiB
9Részben helyes1/22ms824 KiB
10Részben helyes1/22ms820 KiB
11Részben helyes1/23ms1012 KiB
12Részben helyes1/24ms820 KiB
13Részben helyes1/24ms956 KiB
14Részben helyes1/24ms1076 KiB
15Részben helyes1/24ms1044 KiB
16Részben helyes1/26ms1152 KiB
17Részben helyes1/37ms1056 KiB
18Részben helyes1/37ms1104 KiB
19Részben helyes1/314ms1732 KiB
20Részben helyes1/314ms1588 KiB