Maruf_Hasan

farthest nodes in a tree

Jan 30th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define M 30010
  5. vector<int>adj[M];
  6.  
  7. //pair<int, int>p;
  8. map<pair<int,int>,int >mp;
  9.  
  10. bool visited[M];
  11. int dis[M];
  12. int cost[M];
  13. int bfs(int s)
  14. {
  15. int max=0;
  16. memset(visited,false,sizeof visited);
  17. memset(dis,0,sizeof dis);
  18. visited[s]=true;
  19. dis[s]=0;
  20. queue<int>q;
  21. q.push(s);
  22. while(!q.empty())
  23. {
  24. int u=q.front();
  25. q.pop();
  26. for(int i=0;i<adj[u].size();i++)
  27. {
  28. if(visited[adj[u][i]]==false)
  29. {
  30. pair<int,int>p1,p2;
  31.  
  32. int v=adj[u][i];
  33. visited[v]=true;
  34. //p1=make_pair(u,v);
  35. dis[v]=dis[u]+mp[make_pair(u,v)];
  36. q.push(v);
  37. if(dis[v]>max)
  38. {
  39. max=dis[v];
  40. }
  41. }
  42. }
  43. }
  44. return max;
  45. }
  46.  
  47.  
  48. int main()
  49. {
  50. int t,j=0;
  51. cin>>t;
  52. while(j<t)
  53. {
  54. int n,i,u,v,w;
  55. cin>>n;
  56.  
  57. for(i=1;i<n;i++)
  58. {
  59. cin>>u>>v>>w;
  60. adj[u].push_back(v);
  61. adj[v].push_back(u);
  62. pair<int,int>p1,p2;
  63. //p1=make_pair(u,v);
  64. //p2=make_pair(v,u);
  65. mp[make_pair(u,v)]=w;
  66. mp[make_pair(v,u)]=w;
  67.  
  68. }
  69. int max=0,ans2;
  70.  
  71.  
  72. for(i=0;i<n;i++)
  73. {
  74. int ans=bfs(i);
  75. if(ans>max)
  76. {
  77. max=ans;
  78. }
  79. }
  80. printf("Case %d: %d\n",j+1,max);
  81. mp.clear();
  82. for(i=0;i<n;i++)
  83. {
  84. adj[i].clear();
  85. }
  86. j++;
  87.  
  88. }
  89.  
  90. return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment