Advertisement
dark-Matter

cf-f

May 24th, 2021
859
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ios std::ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
  3. #define clr cin.ignore(numeric_limits<streamsize>::max(), '\n');
  4. #define ll long long
  5. #define ull unsigned long long
  6. #define ui unsigned int
  7. #define Sort(v) sort(v.begin(),v.end());
  8. #define rsort(v) sort(v.begin(),v.end(), greater<int> ());
  9. #define pb push_back
  10. #define uset unordered_set
  11. #define umap unordered_map
  12. #define pll pair<long long, long long>
  13. #define pii pair<int, int>
  14. #define vi vector<int>
  15. #define vll vector<long long>
  16. #define Max(arr,n) *max_element(arr, arr+n)
  17. #define lb(v,x) (lower_bound(v.begin(),v.end(),x) - v.begin())
  18. #define ub(v,x) (upper_bound(v.begin(),v.end(),x) - v.begin())
  19.  
  20. using namespace std;
  21.  
  22. template <typename T>
  23. void printv(vector<T> v){
  24.     for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
  25.     cout << '\n';
  26. }
  27.  
  28. template <typename T>
  29. void printA(T arr[], int n){
  30.     for (int i = 0; i < n; i++) cout << arr[i] << " ";
  31.     cout << '\n';
  32. }
  33.  
  34. template <typename T>
  35. void print(T var){
  36.     cout << var << '\n';
  37. }
  38.  
  39. template <typename T>
  40. vector<T> v_input(ll n){
  41.     vector<T> a(n);
  42.     for (ll i = 0; i < n; i++) cin >> a[i];
  43.     return a;  
  44. }
  45.  
  46. ll t;
  47.  
  48. void dfs(ll node, vll graph[], vector<bool> visited, vll l, vll r, vll ans[]) {
  49.     if (visited[node]) return;
  50.     visited[node]=true;
  51.     for (ll nd : graph[node])
  52.     {
  53.         if (!visited[nd]) {
  54.             dfs(nd, graph, visited, l, r, ans);
  55.             ans[node][0] += max(abs(l[node]-l[nd]) + ans[nd][0], abs(l[node]-r[nd]) + ans[nd][1]);
  56.             ans[node][1] += max(abs(r[node]-l[nd]) + ans[nd][0], abs(r[node]-r[nd]) + ans[nd][1]);
  57.         }
  58.     }
  59.    
  60. }
  61.  
  62. void solve() {
  63.     ll n;
  64.     cin >> n;
  65.     vll l(n+1), r(n+1);
  66.     for (int i = 1; i < n+1; i++)
  67.     {
  68.         cin >> l[i] >> r[i];
  69.     }
  70.     ll x, y;
  71.     vll graph[n+1];
  72.     for (int i = 0; i < n-1; i++)
  73.     {
  74.         cin >> x >> y;
  75.         graph[x].pb(y);
  76.         graph[y].pb(x);
  77.     }
  78.     vll ans[n+1];
  79.     for (int i = 0; i < n+1; i++)
  80.     {
  81.         ans[i] = vll(2, 0);
  82.     }
  83.     vector<bool> visited(n+1, false);
  84.     dfs(1, graph, visited, l, r, ans);
  85.     print(max(ans[1][0], ans[1][1]));
  86. }
  87.  
  88. int main()
  89. {
  90.     ios;
  91.     cin >> t;
  92.     while (t--)
  93.     {
  94.         solve();
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement