danielvitor23

EAGLE1 - Eagle and Dogs

Apr 15th, 2023
1,153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int64_t INF = 0x3f3f3f3f3f3f3f3fLL;
  5.  
  6. int n;
  7. vector<vector<pair<int, int64_t>>> gr;
  8.  
  9. pair<int64_t, int> dfs(int u, int64_t w, int par = -1) {
  10.   auto res = pair<int64_t, int>({w, u});
  11.   for (auto [to, d] : gr[u]) if (to != par) {
  12.     auto aux = dfs(to, w + d, u);
  13.     res = max(res, aux);
  14.   }
  15.   return res;
  16. }
  17.  
  18. void dfs2(int u, vector<int64_t> &dist, int par = -1) {
  19.   for (auto [to, d] : gr[u]) if (to != par) {
  20.     dist[to] = dist[u] + d;
  21.     dfs2(to, dist, u);
  22.   }
  23. }
  24.  
  25. int main() {
  26.   cin.tie(0)->sync_with_stdio(0);
  27.  
  28.   int tc; cin >> tc;
  29.   while (tc--) {
  30.     cin >> n;
  31.  
  32.     gr.assign(n, vector<pair<int, int64_t>>());
  33.  
  34.     for (int i = 0; i < n-1; ++i) {
  35.       int a, b, d; cin >> a >> b >> d, --a, --b;
  36.       gr[a].push_back({b, d});
  37.       gr[b].push_back({a, d});
  38.     }
  39.    
  40.     auto [w, u] = dfs(0, 0, -1);
  41.     auto [ww, v] = dfs(u, 0, -1);
  42.     // cout << 1+u << " - " << 1+v << " = " << ww << '\n';
  43.  
  44.     vector<int64_t> d1(n, INF);
  45.     vector<int64_t> d2(n, INF);
  46.  
  47.     d1[u] = 0;
  48.     dfs2(u, d1, -1);
  49.     d2[v] = 0;
  50.     dfs2(v, d2, -1);
  51.  
  52.     for (int i = 0; i < n; ++i) {
  53.       if (i == u) {
  54.         cout << ww << " \n"[i==n-1];
  55.       } else if (i == v) {
  56.         cout << ww << " \n"[i==n-1];
  57.       } else {
  58.         cout << max(d1[i], d2[i]) << " \n"[i==n-1];
  59.       }
  60.     }
  61.   }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment