#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 +5;
long long n, l[MaxN], r[MaxN], dp[MaxN][2];
vector <long long> a[MaxN];

void dfs(long long u, long long par)
{
   for (long long v : a[u])
   {
       if(v!=par)
       {
           dfs(v,u);
           dp[u][0] += max(dp[v][0] + abs(l[v]-l[u]) ,dp[v][1] + abs(r[v]-l[u]));
           dp[u][1] += max(dp[v][0] + abs(l[v]-r[u]) ,dp[v][1] + abs(r[v]-r[u]));

       }
   }
}

void input()
{
    cin >> n ;
    for (long long i=1; i<=n; i++)
    {
        cin >> l[i] >> r[i];
    }
    for (long long i=1; i<n; i++)
    {
        long long u,v;
        cin >> u >> v;

        a[u].push_back(v);
        a[v].push_back(u);
    }
}

void solve()
{
    memset(dp,0,sizeof(dp));
    dfs(1,-1);


    cout << max(dp[1][1],dp[1][0]);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    solve();
}
