rt
#include<bits/stdc++.h>
#define rrg register
#define int __int128
using namespace std;
int n;
char buf[1 << 20],*p1,*p2;
#define getc() getchar()
int read(){int x = 0,w = 1;char cc = getc();if(cc < '0' || cc > '9'){if(cc == '-')w = -1;cc = getc();}while(cc <= '9' && cc >= '0'){x = x * 10 + (cc ^ 48);cc = getc();}return x * w;}
inline void print(int x){if(x < 0){x = -x;putchar('-');}if(x > 9)print(x / 10);putchar(x % 10 + 48);}
struct node{
long long a,b,c;
}vv[200005];
vector<int>g[200005];
int ans;
bool vis[200005];
int fa[200005];
bool calc(long long l,long long r,long long i){
int day = (r - l + 1);
if(vv[i].c >= 0){
int tmp = ((vv[i].b + l * vv[i].c) + (vv[i].b + r * vv[i].c)) * day / 2;
if(tmp < vv[i].a)return 0;
}
if(vv[i].c < 0){
if(vv[i].b + l * vv[i].c < 1)if(day < vv[i].a)return 0;
else{
int tmp = vv[i].b + l * vv[i].c;
int step = ceil(tmp / 1.0 * (-vv[i].c));
int tmp3 = (1 + tmp) * step / 2;
if(tmp3 + (day - step) < vv[i].a)return 0;
}
}
return 1;
}
inline bool chk(int tme){
vector< pair<long long,long long> >ve;
for(register long long i = 1;i <= n;++i){
long long l = 0,r = tme,ttt = 0;
while(l <= r){
long long mid = l + r >> 1;
if(calc(mid,tme,i))l = mid + 1,ttt = mid;
else r = mid - 1;
}
if(i == 1 && !ttt)return 0;
ve.push_back(make_pair(ttt,i));
if(ttt <= 1 && i != 1)return 0;
}
sort(ve.begin(),ve.end());
vector<long long>flct(n + 5,0);
flct[1] = 1;
for(rrg long long i = 0;i < ve.size();++i)flct[i + 2] = ve[i].second;
memset(vis,0,sizeof(vis));
vis[0] = 1;
int t = 0;
for(rrg long long i = 1;i <= n;++i){
int now = flct[i];
while(!vis[now])t++,vis[now] = 1,now = fa[now];
if(i > 1 && t > ve[max(i - 2,0ll)].first)return 0;
}
return 1;
}
void dfs(int now,int fath){
fa[now] = fath;
for(auto x : g[now])if(x != fath)dfs(x,now);
}
int u,v;
signed main(){
// freopen("tree2.in","r",stdin);
n = read();
for(rrg int i = 1;i <= n;++i){
vv[i].a = read();
vv[i].b = read();
vv[i].c = read();
}
for(rrg int i = 1;i <= n;++i){
u = read();
v = read();
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,0);
long long l = n,r = 1e9 + 5;
while(l <= r){
long long mid = l + r >> 1;
if(chk(mid))ans = mid,r = mid - 1;
else l = mid + 1;
}
print(ans);
return 0;
}