树dp
太久不做了,纠结于细节很久,到最后才写好 结果没时间交了 崩溃
//cyc
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define mst(a) memset(a,0,sizeof a)
#define int long long
using namespace std;
typedef pair<int,int> pii;
const int maxn=1e5+5;
int dp[maxn][2];
struct rec
{
int l,r;
}vec[maxn];
vector<int> grp[maxn];
int n;
int ans;
void solve(int x,int fa)
{
for(int it:grp[x]){
if(it==fa)continue;
solve(it,x);
dp[x][1]+=max(dp[it][0]+abs(vec[it].l-vec[x].r),dp[it][1]+abs(vec[x].r-vec[it].r));
dp[x][0]+=max(dp[it][0]+abs(vec[it].l-vec[x].l),dp[it][1]+abs(vec[x].l-vec[it].r));
}
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int _;
cin>>_;
while(_--){
int l,r;
cin>>n;
for(int i=1;i<=n;i++){
cin>>l>>r;
vec[i]={l,r};
dp[i][0]=dp[i][1]=0;
grp[i].clear();
}
int u,v;
ans=0;
for(int i=1;i<n;i++){
cin>>u>>v;
grp[u].pb(v);
grp[v].pb(u);
// fa[u]=v;
}
solve(1,0);
int ans=max(dp[1][0],dp[1][1]);
cout<<ans<<endl;
}
}