➤ Problem Link : RTREE
👉 Hint : Use DFS
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; vector<int> arr[100002]; bool visited[100002]; int ans[100002]; pair<int,int> dfsLong(int v) { int max1=0; int max2=0; pair<int,int> child; int val=0; visited[v]=1; if(arr[v].size()==0) return make_pair(1,1); for(int i=0;i<arr[v].size();i++) { if(!visited[arr[v][i]]) { child=dfsLong(arr[v][i]); if(child.second>max1) { max2=max1; max1=child.second; } else if(child.second>max2) max2=child.second; val=max(val,child.first); } } val=max(val,1+max1+max2); ans[v]=val-1; return make_pair(val,1+max1); } int main() { int u,v,n,r,q,s; cin>>n; memset(arr,0,sizeof(arr)); memset(visited,0,sizeof(visited)); for(int i=1;i<n;i++) { cin>>u>>v; arr[u].push_back(v); arr[v].push_back(u); } cin>>r; dfsLong(r).first; cin>>q; while(q--) { cin>>s; cout<<ans[s]<<endl; } }
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!!