1336A. Linova and Kingdom - Codeforces Solution C++

  Problem Link : 1336A. Linova and Kingdom 


✅ C++ Solution :

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

#define ll long long int
#define pb push_back
#define pp pair<ll,ll>
#define mp make_pair
vector<ll> adj[200001];
vector<pp> dpt;
ll sz[200001];
ll mx;

bool comp(pp x, pp y)
{
	return x.second-sz[x.first] > y.second-sz[y.first];
}

ll dfs(int v, ll d, int p)
{
    sz[v]=1;
	mx=max(d,mx);
	dpt.pb(mp(v,d));
	for(int i=0;i<adj[v].size();i++)
		if(adj[v][i]!=p)
            sz[v]+=dfs(adj[v][i],d+1,v);

    return sz[v];
}

int main()
{
	int n,k;
	mx=0;
	cin>>n>>k;
	int x,y;
	for(int i=1;i<n;i++)
	{
		cin>>x>>y;
		adj[x].pb(y);
		adj[y].pb(x);
	}
    for(int i=1;i<=n;i++)
        sz[i]=0;
	dfs(1,0,-1);

	ll ans=0;
	sort(dpt.begin(),dpt.end(),comp);
	for(int i=0;i<dpt.size() && k--;i++)
	{
		ans=ans+dpt[i].second-sz[dpt[i].first]+1;
	//	cout<<dpt[i].first<<"\n";
	}
	cout<<ans;

}

 

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!!