#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define mkp make_pair
//#define __int128 ll
using namespace std;
const ll maxn=2e5+10;
ll n,a[maxn],b[maxn],c[maxn],u,v,d[maxn],lo,hi,mid,head[maxn],tot,son[maxn],top[maxn],siz[maxn],fa[maxn],dep[maxn],tid;
ll id[maxn],dfn[maxn],g[maxn];
struct edge
{
ll v,nxt;
}e[maxn];
void ins(ll u,ll v)
{
e[++tot]=(edge){v,head[u]};
head[u]=tot;
}
ll find(ll x)
{
if(g[x]==x) return x;
return g[x]=find(g[x]);
}
ll Getd(ll a,ll b,ll c,ll t)
{
if(c==0) return max(0ll,t-(a-1)/b);
ll l=1, r=t;
if(c>0)
{
while(l<=r)
{
ll Mid=l+r>>1;
ll tr=(Mid+t)*(t-Mid+1)>>1;
if((t-Mid+1)*b+((__int128)c*tr)>=a) l=Mid+1;
else r=Mid-1;
}
return r;
}
else
{
ll p=(b-1)/(-c); p=min(p,t); p=max(p,0ll);
while(l<=r)
{
ll Mid=l+r>>1;
__int128 res=0;
if(b+c*Mid<=1)
{
res=t-Mid+1;
}
else
{
ll tr=(Mid+p)*(p-Mid+1)>>1;
res=b*(p-Mid+1)+((__int128)c*tr);
res+=t-p;
}
if(res>=a) l=Mid+1;
else r=Mid-1;
}
return r;
}
}
void dfs(ll u,ll f)
{
fa[u]=f; dep[u]=dep[f]+1; siz[u]=1;
for(ll i=head[u];i;i=e[i].nxt)
{
ll v=e[i].v;
if(v!=f)
{
dfs(v,u);
siz[u]+=siz[v];
if(siz[v]>siz[son[u]]) son[u]=v;
}
}
}
ll upd(ll u)
{
ll res=0;
while((u=find(u))!=n+1)
{
++res;
g[u]=fa[u];
}
return res;
}
bool cmp(ll x,ll y)
{
return d[x]<d[y];
}
bool check(ll mid)
{
for(ll i=1;i<=n;i++)
{
d[i]=Getd(a[i],b[i],c[i],mid);
id[i]=i;
}
for(ll i=1;i<=n+1;i++) g[i]=i;
tid=0;
sort(id+1,id+1+n,cmp);
ll cnt=0;
for(ll i=1;i<=n;i++)
{
ll u=id[i];
ll tmp=upd(u);
if(cnt+tmp>d[u]) return false;
cnt+=tmp;
}
return true;
}
void rd(ll &x)
{
char c; ll f;
while(!isdigit(c=getchar())) ;
if(c=='-') f=-1;
else f=1, x=c-'0';
while(isdigit(c=getchar())) x=x*10+c-'0';
x*=f;
}
int main()
{
// freopen("tree.in","r",stdin);
// freopen("tree.out","w",stdout);
rd(n);
for(ll i=1;i<=n;i++)
{
rd(a[i]); rd(b[i]); rd(c[i]); d[i]=-1;
}
for(ll i=1;i<n;i++)
{
rd(u); rd(v);
ins(u,v); ins(v,u);
}
dfs(1,n+1);
ll lo=1, hi=1e9;
ll ans=0, kc=0;
while(lo<=hi)
{
ll mid=lo+hi>>1;
if(check(mid)) hi=mid-1;
else lo=mid+1;
}
printf("%lld",lo);
return 0;
}
WA85pts,盯代码盯了几万年了,根本发现不了错误。
求求好心人帮忙看看。