Salvens

F

Aug 1st, 2023
926
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. //#define int long long
  7.  
  8. const long long INF = 1e18 + 7;
  9. const int MAXN = 1e5 + 10;
  10. const int N = 1e5 + 10;
  11.  
  12. long long dp[2][MAXN];
  13. array<vector<int>, MAXN> g;
  14. array<pair<int, int>, MAXN> val;
  15.  
  16. void dfs(int v, int p) {
  17.     dp[0][v] = dp[1][v] = 0;
  18.     for (auto to: g[v]) {
  19.         if (to == p) {
  20.             continue;
  21.         }
  22.         dfs(to, v);
  23.         dp[0][v] += max(dp[0][to] + abs(val[v].first - val[to].first), dp[1][to] + abs(val[v].first - val[to].second));
  24.         dp[1][v] += max(dp[0][to] + abs(val[v].second - val[to].first), dp[1][to] + abs(val[v].second - val[to].second));
  25.     }
  26. }
  27.  
  28. void solve() {
  29.     int n;
  30.     cin >> n;
  31.     for (int i = 0; i < n; ++i) {
  32.         cin >> val[i].first >> val[i].second;
  33.     }
  34.     fill(g.begin(), g.begin() + n, vector<int>());
  35.     for (int i = 0; i < n - 1; ++i) {
  36.         int u, v;
  37.         cin >> u >> v;
  38.         --u, --v;
  39.         g[u].emplace_back(v);
  40.         g[v].emplace_back(u);
  41.     }
  42.  
  43.     dfs(0, -1);
  44.  
  45.     cout << max(dp[0][0], dp[1][0]) << '\n';
  46. }
  47.  
  48. signed main() {
  49.     ios_base::sync_with_stdio(false);
  50.     cin.tie(nullptr);
  51.     cout.tie(nullptr);
  52.  
  53.     int tt = 1;
  54.     cin >> tt;
  55.     while (tt--) {
  56.         solve();
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment