链的特殊性质爆 0 求调
查看原帖
链的特殊性质爆 0 求调
877691
MorLeaves楼主2024/9/25 19:20
#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;
}
2024/9/25 19:20
加载中...