9092022-01-27 14:18:39Babják PéterSzállításcpp11Elfogadva 40/408ms4764 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ÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/03ms2812 KiB
2Elfogadva0/04ms3180 KiB
3Elfogadva2/22ms2808 KiB
4Elfogadva2/22ms2948 KiB
5Elfogadva2/22ms2960 KiB
6Elfogadva2/22ms2968 KiB
7Elfogadva2/22ms2980 KiB
8Elfogadva2/22ms2984 KiB
9Elfogadva2/22ms2992 KiB
10Elfogadva2/22ms2992 KiB
11Elfogadva2/23ms3208 KiB
12Elfogadva2/23ms3248 KiB
13Elfogadva2/23ms3320 KiB
14Elfogadva2/23ms3372 KiB
15Elfogadva2/24ms3448 KiB
16Elfogadva2/23ms3616 KiB
17Elfogadva3/34ms3712 KiB
18Elfogadva3/34ms3924 KiB
19Elfogadva3/38ms4664 KiB
20Elfogadva3/37ms4764 KiB