fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const long long MaxN = 1e6;
  5.  
  6. long long n;
  7. vector<long long> a[MaxN+5];
  8. bool visited[MaxN+5];
  9. long long depth1[MaxN+5],depth2[MaxN+5];
  10.  
  11. void input()
  12. {
  13. cin >> n;
  14.  
  15. for(long long i=1;i<=n-1;i++)
  16. {
  17. long long u,v;
  18. cin >> u >> v;
  19. a[u].push_back(v);
  20. a[v].push_back(u);
  21. }
  22. }
  23.  
  24. void dfs(long long i,vector<long long> a[],bool visited[],long long depth[])
  25. {
  26. stack<long long> st;
  27. st.push(i);
  28. visited[i]=true;
  29.  
  30. while(!st.empty())
  31. {
  32. long long u=st.top();
  33. st.pop();
  34.  
  35. for(long long v:a[u])
  36. {
  37. if(!visited[v])
  38. {
  39. visited[v]=true;
  40. depth[v]=depth[u]+1;
  41. st.push(v);
  42. }
  43. }
  44. }
  45. }
  46.  
  47. void solve()
  48. {
  49. memset(visited,false,sizeof(visited));
  50. memset(depth1,0,sizeof(depth1));
  51.  
  52. dfs(1,a,visited,depth1);
  53.  
  54. long long p1=1;
  55.  
  56. for(long long i=2;i<=n;i++)
  57. {
  58. if(depth1[i]>depth1[p1])
  59. {
  60. p1=i;
  61. }
  62. }
  63.  
  64. memset(visited,false,sizeof(visited));
  65. memset(depth2,0,sizeof(depth2));
  66.  
  67. dfs(p1,a,visited,depth2);
  68.  
  69. long long p2=p1;
  70.  
  71. for(long long i=2;i<=n;i++)
  72. {
  73. if(depth2[i]>depth2[p2])
  74. {
  75. p2=i;
  76. }
  77. }
  78.  
  79. cout << depth2[p2];
  80. }
  81.  
  82. int main()
  83. {
  84. ios_base::sync_with_stdio(0);
  85. cin.tie(0);
  86.  
  87. input();
  88. solve();
  89. }
Success #stdin #stdout 0.01s 43648KB
stdin
Standard input is empty
stdout
Standard output is empty