#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();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAxZTUgKzU7CmxvbmcgbG9uZyBuLCBsW01heE5dLCByW01heE5dLCBkcFtNYXhOXVsyXTsKdmVjdG9yIDxsb25nIGxvbmc+IGFbTWF4Tl07Cgp2b2lkIGRmcyhsb25nIGxvbmcgdSwgbG9uZyBsb25nIHBhcikKewogICBmb3IgKGxvbmcgbG9uZyB2IDogYVt1XSkKICAgewogICAgICAgaWYodiE9cGFyKQogICAgICAgewogICAgICAgICAgIGRmcyh2LHUpOwogICAgICAgICAgIGRwW3VdWzBdICs9IG1heChkcFt2XVswXSArIGFicyhsW3ZdLWxbdV0pICxkcFt2XVsxXSArIGFicyhyW3ZdLWxbdV0pKTsKICAgICAgICAgICBkcFt1XVsxXSArPSBtYXgoZHBbdl1bMF0gKyBhYnMobFt2XS1yW3VdKSAsZHBbdl1bMV0gKyBhYnMoclt2XS1yW3VdKSk7CgogICAgICAgfQogICB9Cn0KCnZvaWQgaW5wdXQoKQp7CiAgICBjaW4gPj4gbiA7CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gbFtpXSA+PiByW2ldOwogICAgfQogICAgZm9yIChsb25nIGxvbmcgaT0xOyBpPG47IGkrKykKICAgIHsKICAgICAgICBsb25nIGxvbmcgdSx2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CgogICAgICAgIGFbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFbdl0ucHVzaF9iYWNrKHUpOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkKewogICAgbWVtc2V0KGRwLDAsc2l6ZW9mKGRwKSk7CiAgICBkZnMoMSwtMSk7CgoKICAgIGNvdXQgPDwgbWF4KGRwWzFdWzFdLGRwWzFdWzBdKTsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbnB1dCgpOwogICAgc29sdmUoKTsKfQo=