题目链接 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <map> using namespace std; #define int long long const int N = 200010; int e[N],ne[N],h[N],idx=0; int l[N],r[N]; int n; int f[N][2]; void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; } void dfs(int u,int fa) { for(int i=h[u];i!=-1;i=ne[i]) { int v=e[i]; if(v==fa)continue; dfs(v,u); f[u][0]+=max(f[v][0]+abs(l[u]-l[v]),f[v][1]+abs(l[u]-r[v])); f[u][1]+=max(f[v][0]+abs(r[u]-l[v]),f[v][1]+abs(r[u]-r[v])); } } void solve() { memset(h,-1,sizeof h); idx=0; scanf("%lld",&n); int a,b; for(int i=1;i<=n;i++)scanf("%lld %lld",l+i,r+i),f[i][0]=f[i][1]=0; for(int i=1;i<n;i++) { scanf("%lld%lld",&a,&b); add(a,b); add(b,a); } dfs(1,-1); printf("%lld\n",max(f[1][0],f[1][1])); } signed main() { int T; cin>>T; while(T--)solve(); }