Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ios std::ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
- #define clr cin.ignore(numeric_limits<streamsize>::max(), '\n');
- #define ll long long
- #define ull unsigned long long
- #define ui unsigned int
- #define Sort(v) sort(v.begin(),v.end());
- #define rsort(v) sort(v.begin(),v.end(), greater<int> ());
- #define pb push_back
- #define uset unordered_set
- #define umap unordered_map
- #define pll pair<long long, long long>
- #define pii pair<int, int>
- #define vi vector<int>
- #define vll vector<long long>
- #define Max(arr,n) *max_element(arr, arr+n)
- #define lb(v,x) (lower_bound(v.begin(),v.end(),x) - v.begin())
- #define ub(v,x) (upper_bound(v.begin(),v.end(),x) - v.begin())
- using namespace std;
- template <typename T>
- void printv(vector<T> v){
- for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
- cout << '\n';
- }
- template <typename T>
- void printA(T arr[], int n){
- for (int i = 0; i < n; i++) cout << arr[i] << " ";
- cout << '\n';
- }
- template <typename T>
- void print(T var){
- cout << var << '\n';
- }
- template <typename T>
- vector<T> v_input(ll n){
- vector<T> a(n);
- for (ll i = 0; i < n; i++) cin >> a[i];
- return a;
- }
- ll t;
- void dfs(ll node, vll graph[], vector<bool> visited, vll l, vll r, vll ans[]) {
- if (visited[node]) return;
- visited[node]=true;
- for (ll nd : graph[node])
- {
- if (!visited[nd]) {
- dfs(nd, graph, visited, l, r, ans);
- ans[node][0] += max(abs(l[node]-l[nd]) + ans[nd][0], abs(l[node]-r[nd]) + ans[nd][1]);
- ans[node][1] += max(abs(r[node]-l[nd]) + ans[nd][0], abs(r[node]-r[nd]) + ans[nd][1]);
- }
- }
- }
- void solve() {
- ll n;
- cin >> n;
- vll l(n+1), r(n+1);
- for (int i = 1; i < n+1; i++)
- {
- cin >> l[i] >> r[i];
- }
- ll x, y;
- vll graph[n+1];
- for (int i = 0; i < n-1; i++)
- {
- cin >> x >> y;
- graph[x].pb(y);
- graph[y].pb(x);
- }
- vll ans[n+1];
- for (int i = 0; i < n+1; i++)
- {
- ans[i] = vll(2, 0);
- }
- vector<bool> visited(n+1, false);
- dfs(1, graph, visited, l, r, ans);
- print(max(ans[1][0], ans[1][1]));
- }
- int main()
- {
- ios;
- cin >> t;
- while (t--)
- {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement