fork download
  1. #include <iostream>
  2. #include<stack>
  3. #include<vector>
  4. #include<algorithm>
  5. #define max 100007
  6. using namespace std;
  7. int node1,Distance;
  8. void dfs(vector<int>vec[],int node,int start)
  9. {
  10. int dist[node+1],par[node+1],vis[node+1];
  11. for(int i=0;i<node+1;i++)
  12. dist[i]=0,par[i]=0,vis[i]=0;
  13. stack<int>trav;
  14. trav.push(start);
  15. // for(int i=0;i<vec[1].size();i++)
  16. // cout<<vec[1][i]<<" ";
  17. while(!trav.empty())
  18. {
  19. int u=trav.top();
  20. //cout<<u<<" ";
  21. trav.pop();
  22. {
  23. if(!vis[u])
  24. {
  25. dist[u]=dist[par[u]]+1;//for storing distances from parent
  26. dist[start]=0;
  27. vis[u]++;
  28. for(int i=0;i<vec[u].size();i++)
  29. {
  30. int c=vec[u][i];
  31. trav.push(c);
  32. if(!vis[c])
  33. par[c]=u;//storing the parent
  34. }
  35. }
  36. }
  37.  
  38. }
  39. // for(int i=1;i<node+1;i++)
  40. // cout<<dist[i]<<" ";
  41. // cout<<endl;
  42. node1=distance(dist,max_element(dist,dist+(node+1)));//finding the node with largest distance
  43. // cout<<node1<<" ";
  44. Distance=dist[node1];//finding the max dist
  45. // cout<<Distance<<" ";
  46. }
  47. int main() {
  48. long long int n;
  49. cin>>n;
  50. vector<int>vec[n+1];
  51. for(int i=0;i<n+1;i++)
  52. {
  53. int u,v;
  54. cin>>u>>v;
  55. //cout<<u<<" "<<v;
  56. //cout<<endl;
  57. vec[u].push_back(v);
  58. vec[v].push_back(u);
  59. }
  60. dfs(vec,n,1);
  61. dfs(vec,n,node1);
  62. cout<<Distance<<endl;
  63. // your code here
  64.  
  65. return 0;
  66. }
Success #stdin #stdout 0s 15240KB
stdin
3
1 2
2 3
stdout
2