➤ Problem Link : BENEFACT
👉 Hint : Use DFS Algorithm and perform work while going up
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; vector<pair<int,int> >adj[500001]; bool visited[500001]; int ans=-1; int dfs(int v) { visited[v]=1; vector<int>s; for(auto it=adj[v].begin();it!=adj[v].end();it++) { int vtx=(*it).first; if(!visited[vtx]) { int l=(*it).second; int f=dfs(vtx); s.push_back(f+l); } } sort(s.begin(),s.end(),greater<int>()); if(s.size()==0) { return 0; } if(s.size()==1) { int l1=s[0]; if(l1>ans) ans=l1; } else { int l1=s[0]+s[1]; if(l1>ans) ans=l1; } return s[0]; } int main() { int t; cin>>t; while(t--) { memset(visited,0,sizeof(visited)); int n,x,y,v; cin>>n; for(int i=0;i<=n;i++) adj[i].clear(); for(int i=1;i<n;i++) { cin>>x>>y>>v; adj[x].push_back(make_pair(y,v)); adj[y].push_back(make_pair(x,v)); } int f=dfs(1); cout<<ans<<endl; ans=-1; } }
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!!