#include<iostream>
#include<cstdio>
typedef __int128 ll;
using namespace std;
ll n,a[200005],b[200005],c[200005],u,v,idx=1,h[200005],e[200005],ne[200005],ans=0;
inline ll read() {
ll x=0,f=1;
char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
inline void print(ll x) {
if (x<0) {
putchar('-');
print(-x);
return ;
}
if (x>=10) print(x/10);
putchar(x%10+'0');
}
void add(ll a,ll b) {
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
ll check(ll x,ll l,ll r) {
if (c[x]>=0) return b[x]*(r-l+1)+(l+r)*(r-l+1)/2*c[x];
ll p=(1-b[x])/c[x];
if (p<l) return r-l+1;
else if (p>r) return b[x]*(r-l+1)+(l+r)*(r-l+1)/2*c[x];
else return b[x]*(p-l+1)+(l+p)*(p-l+1)/2*c[x]+r-p;
}
int main() {
n=read();
for(ll i=1;i<=n;i++) a[i]=read(),b[i]=read(),c[i]=read();
bool bb=true;
for(ll i=1;i<=n-1;i++) {
u=read(),v=read();
if (u!=i||v!=i+1) bb=false;
add(u,v),add(v,u);
}
if (bb==true) {
for(ll i=1;i<=n;i++) {
ll l=i,r=1e18;
while(l<r) {
ll mid=(l+r)/2;
if (check(i,i,mid)>=a[i]) r=mid;
else l=mid+1;
}
ans=max(ans,r);
}
print(ans);
}
return 0;
}