#include <bits/stdc++.h>
using namespace std;
#define N 100005
#define int long long
int n, a[N], b[N], c[N], day[N], cnt[N];
vector<int> e[N];
void dfs(int x, int fa) {
for (auto y : e[x]) {
if (y == fa) continue;
dfs(y, x);
day[x] = min(day[x], day[y] - 1);
}
}
bool solve(int mid, int k, int i) {
if (c[i] >= 0) return k * b[i] + (__int128)(2 * mid - k + 1) * mid * c[i] / 2 >= a[i];
int x = abs(b[i] / c[i]);
if (mid - k + 1 > x) return k >= a[i];
return mid - x + (x + k - mid) * b[i] + (__int128)(x + k - mid) * (x + mid - k + 1) * c[i] / 2 >= a[i];
}
bool check(int Mid) {
for (int i = 1; i <= n; i++) {
if (!solve(Mid, Mid, i)) return 0;
int l = 0, r = Mid;
while (l <= r) {
int mid = l + r >> 1;
if (solve(Mid, mid, i)) day[i] = mid, r = mid - 1;
else l = mid + 1;
}
day[i] = Mid - day[i] + 1;
}
memset(cnt, 0, sizeof(cnt));
for (int i = 1; i <= n; i++)
if (day[i] <= n)
cnt[day[i]]++;
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += cnt[i];
if (sum > i) return 0;
}
return 1;
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i] >> b[i] >> c[i];
for (int i = 1; i < n; i++) {
int x, y;
cin >> x >> y;
e[x].push_back(y);
e[y].push_back(x);
}
int l = n, r = 1e9, ans = 0;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
cout << ans;
return 0;
}
剩下的35pts都比答案少一。