743D. Chloe and pleasant prizes - Codeforces Solution C++

  Problem Link : 743D. Chloe and pleasant prizes 


✅ C++ Solution :

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

#define ll long long int

ll ans;

pair<ll,ll> dfs(int v, ll arr[], vector<int> adj[],int p)
{
	if(adj[v].size()==1 && p!=-1)
	{
		return make_pair(arr[v],arr[v]);
	}
	ll mx=LONG_MIN,sx=LONG_MIN;
	ll sum=0;
	pair<ll,ll> val;
	for(int i=0;i<adj[v].size();i++)
	{
		if(adj[v][i]==p)
			continue;
		val=dfs(adj[v][i],arr,adj,v);
		sum+=val.first;
		if(val.second>mx)
		{
			sx=mx;
			mx=val.second;
		}
		else if(val.second>sx)
			sx=val.second;

	}

	if(sx!=LONG_MIN && mx!=LONG_MIN)
		ans=max(ans,sx+mx);

	mx=max(mx,sum+arr[v]);

	return make_pair(sum+arr[v],mx);



}

int main()
{
	ans=LONG_MIN;
	int n,u,v;
	cin>>n;
	ll arr[n+1];
	vector<int> adj[n+1];
	for(int i=1;i<=n;i++)
		cin>>arr[i];
	for(int i=0;i<n-1;i++)
	{
		cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}

	dfs(1,arr,adj,-1);

	if(ans==LONG_MIN)
		cout<<"Impossible";
	else
		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!!