RTREE - Roger and tree - SPOJ Solution C++

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