1056D. Decorate Apple Tree - Codeforces Solution C++

  Problem Link : 1056D. Decorate Apple Tree 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

int ans[100001]={0};

int dfs(int v,vector<int> adj[], int n,int p)
{
	if(adj[v].size()==1 && p!=-1)  //leaf
	{
		ans[1]++;
		return 1;
	}

	int cnt=0;
	for(int i=0;i<adj[v].size();i++)
	{
		if(adj[v][i]==p)
			continue;
		cnt+=dfs(adj[v][i],adj,n,v);
	}
	ans[cnt]++;
	return cnt;
}


int main()
{
	int n,v;
	cin>>n;
	if(n==1)
	{
	    cout<<"1";
	    exit(0);
	}
	vector<int> adj[n+1];
	for(int i=2;i<=n;i++)
	{
		cin>>v;
		adj[i].push_back(v);
		adj[v].push_back(i);
	}

	dfs(1,adj,n,-1);
    
    
    
	vector<int> vec;

	int junc=1;
	int ind=1;
	int sum=0;
	while(junc<=n)
	{
		if(sum+ans[ind]>=junc)
		{
			vec.push_back(ind);
			junc++;
		}
		else
		{
		    sum+=ans[ind];
			ind++;
		}
	}           

	for(auto i: vec)
		cout<<i<<" ";

}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!