Guest User

Untitled

a guest
Oct 25th, 2023
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long int
  3. #define pb push_back
  4. #define se second
  5. #define fi first
  6. using namespace std;
  7.  
  8. int dx[8] = { 1, -1, 0, 0, 1, -1, 1, -1 };
  9. int dy[8] = { 0, 0, 1, -1, 1, -1, -1, 1 };
  10.  
  11. /*#include<ext/pb_ds/assoc_container.hpp>
  12. #include<ext/pb_ds/tree_policy.hpp>
  13.  
  14. using namespace __gnu_pbds;
  15.  
  16. typedef tree <
  17.     pair<int ,int>,
  18.     null_type,
  19.     less<pair<int ,int>>,
  20.     rb_tree_tag,
  21.     tree_order_statistics_node_update> ordered_set;
  22. */
  23.  
  24. const ll mod = 1e9+7;
  25. const int N = 1e6+10;
  26.  
  27. vector<pair<int, int>>vec[N];
  28. int dis1[N], dis2[N], dis3[N];
  29.  
  30. void clr(int n)
  31. {
  32.     for(int i=0;i<=n;i++)
  33.     {
  34.         vec[i].clear();
  35.         dis1[i] = 0;
  36.         dis2[i] = 0;
  37.         dis3[i] = 0;
  38.     }
  39. }
  40.  
  41. void dfs(int node, int par = -1)
  42. {
  43.     for(auto [u, w]: vec[node])
  44.     {
  45.         if(u==par) continue;
  46.  
  47.         dis1[u] = max(dis1[u], dis1[node]+w);
  48.  
  49.         dfs(u, node);
  50.     }
  51. }
  52.  
  53. void dfs1(int node, int par = -1)
  54. {
  55.     for(auto [u, w]: vec[node])
  56.     {
  57.         if(u==par) continue;
  58.  
  59.         dis2[u] = max(dis2[u], dis2[node]+w);
  60.  
  61.         dfs1(u, node);
  62.     }
  63. }
  64.  
  65. void dfs2(int node, int par = -1)
  66. {
  67.     for(auto [u, w]: vec[node])
  68.     {
  69.         if(u==par) continue;
  70.  
  71.         dis3[u] = max(dis3[u], dis3[node]+w);
  72.  
  73.         dfs2(u, node);
  74.     }
  75. }
  76. void solve(int tc)
  77. {
  78.     int n,i,j,u,v,w;
  79.  
  80.     cin>>n;
  81.  
  82.     clr(n);
  83.  
  84.     for(i=0;i<n-1;i++)
  85.     {
  86.         cin>>u>>v>>w;
  87.  
  88.         vec[u].pb({v, w});
  89.         vec[v].pb({u, w});
  90.     }
  91.     dfs(0);
  92.  
  93.     int mx = -1, id = 0;
  94.  
  95.     for(i=0;i<n;i++)
  96.     {
  97.         if(dis1[i]>mx)
  98.         {
  99.             mx = dis1[i];
  100.             id = i;
  101.         }
  102.     }
  103.  
  104.     dfs1(id);
  105.  
  106.  
  107.     mx = -1, id = 0;
  108.  
  109.     for(i=0;i<n;i++)
  110.     {
  111.         if(dis2[i]>mx)
  112.         {
  113.             mx = dis2[i];
  114.             id = i;
  115.         }
  116.     }
  117.  
  118.     dfs2(id);
  119.  
  120.     cout<<"Case "<<tc<<":\n";
  121.  
  122.     for(i=0;i<n;i++) cout<<max(dis2[i], dis3[i])<<"\n";
  123. }
  124. int32_t main()
  125. {
  126.     ios_base::sync_with_stdio(0);
  127.     cin.tie(0);
  128.  
  129.     //pre();
  130.  
  131.     int tc = 1;
  132.     cin>>tc;
  133.     for(int i=1;i<=tc;i++)
  134.     {
  135.         solve(i);
  136.     }
  137.     return 0;
  138. }
  139.  
Add Comment
Please, Sign In to add comment