909 2022. 01. 27 14:18:39 Babják Péter Szállítás cpp11 Elfogadva 40/40 8ms 4764 KiB
#include<bits/stdc++.h>
#define MAXN 20001
#define IO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
using namespace std;
int n,k,sum,a;
int mx[MAXN],lch[MAXN];
bool stp[MAXN];
vector<int>adj[MAXN],ans2;
vector<pair<int,int> >ans;
void dfs(int v)
{
	if(adj[v].empty())
	{
		stp[v]=1;
		mx[v]=1;
		lch[v]=v;
		return;
	}
	int mxx=-1,mxu;
	for(int u:adj[v])
	{
		dfs(u);
		if(mxx<mx[u])
		{
			mxx=mx[u];
			mxu=u;
		}
	}
	stp[mxu]=0;
	stp[v]=1;
	mx[v]=mxx+1;
	lch[v]=lch[mxu];
}
int main()
{
	IO;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a;
		adj[a].push_back(i);
	}
	dfs(1);
	for(int i=1;i<=n;i++) if(stp[i])ans.push_back({mx[i],lch[i]});
	sort(ans.rbegin(),ans.rend());
	for(int i=0;i<k && i<ans.size();i++)
	{
		sum+=ans[i].first;
		ans2.push_back(ans[i].second);
	}
	cout<<sum-1<<'\n';
	for(int u:ans2)cout<<u<<' ';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 40/40
1 Elfogadva 0/0 3ms 2812 KiB
2 Elfogadva 0/0 4ms 3180 KiB
3 Elfogadva 2/2 2ms 2808 KiB
4 Elfogadva 2/2 2ms 2948 KiB
5 Elfogadva 2/2 2ms 2960 KiB
6 Elfogadva 2/2 2ms 2968 KiB
7 Elfogadva 2/2 2ms 2980 KiB
8 Elfogadva 2/2 2ms 2984 KiB
9 Elfogadva 2/2 2ms 2992 KiB
10 Elfogadva 2/2 2ms 2992 KiB
11 Elfogadva 2/2 3ms 3208 KiB
12 Elfogadva 2/2 3ms 3248 KiB
13 Elfogadva 2/2 3ms 3320 KiB
14 Elfogadva 2/2 3ms 3372 KiB
15 Elfogadva 2/2 4ms 3448 KiB
16 Elfogadva 2/2 3ms 3616 KiB
17 Elfogadva 3/3 4ms 3712 KiB
18 Elfogadva 3/3 4ms 3924 KiB
19 Elfogadva 3/3 8ms 4664 KiB
20 Elfogadva 3/3 7ms 4764 KiB