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