PT07Z - Longest path in a tree - SPOJ Solution C++

  Problem Link : PT07Z  


👉 Hint : Use DFS

 


✅ C++ Solution :

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

vector<int> arr[10002];
bool visited[10002];
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);

	return make_pair(val,1+max1);

}

int main()
{
	int u,v,n;
	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);
	}
	for(int i=1;i<=10002;i++)
	{
	    if(arr[i].size()!=0)
	   {
	   
	       cout<<dfsLong(i).first-1;
	       break;
	   }
	}

	

}

 

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