求调95分,WA on#15,已经看过了所有警示后人
查看原帖
求调95分,WA on#15,已经看过了所有警示后人
768476
gf202276楼主2024/10/17 20:03
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1000;
int vis[N],ts[N],fa[N];
struct poi{
	int to,nxt;
}en[N<<1];
int head[N],tot;
struct pp{
	int id,zz;
}fin[N];
void add(int u,int v){
	en[++tot]=(poi){v,head[u]};head[u]=tot; 
} 
void dfs(int u,int f){
	fa[u]=f;
	for(int i=head[u];i;i=en[i].nxt){
		int v=en[i].to;
		if(v==f)continue;
		dfs(v,u); 
	} 
}
bool cmp(pp x,pp y){
	return x.zz<y.zz;
}
#define ll long long
#define ii __int128
ll b[N],a[N],c[N],answ;
ii sum0(ii l,ii r,int i){
	return b[i]*(r-l+1)+c[i]*((l+r)*(r-l+1)/2);
}
ii sum(ll l,ll r,int i){
	if(c[i]==0){
		return (r-l+1)*b[i];
	}
	if(c[i]>0){
		return sum0(l,r,i);
	}
	ll M=floor((b[i]-1)*1.00/(-c[i]));
	if(r<=M)return sum0(l,r,i);
	return sum0(l,M,i)+(r-M);
}
bool check1(int i,ll l,ll r){
	if(sum(l,r,i)>=a[i])return 1;
	return 0;
}
int n;
bool ck(ll midx){
	for(int i=1;i<=n;i++)vis[i]=ts[i]=0;
	for(int i=1;i<=n;i++){
		ll l=0,r=midx,ans=0;
		while(l<=r){
			ll mid=(l+r)/2;
			if(check1(i,mid,midx)){
				ans=mid,l=mid+1;
			}else r=mid-1;	
		}
		if(ans==0){
			return 0;
		}
		fin[i].zz=ans;
		//cout<<fin[i].zz<<"   "<<"\n";
	}
	for(int i=1;i<=n;i++){
		fin[i].id=i;
	}
	sort(fin+1,fin+n+1,cmp);
	vis[1]=1;ts[1]=1;int id=1;
	for(int i=1;i<=n;i++){
		int u=fin[i].id;
		if(vis[u])continue;
		int tmp=u;int dis=0;
		while(vis[u]==0){
			u=fa[u];
			dis++;
		}
		int tp=ts[u],idd=id+dis;
		u=tmp;
		while(vis[u]==0){
			ts[u]=id+dis;
			vis[u]=1;
			u=fa[u];
			dis--;
		}
		id=idd;
	}
	int fl=0;
	for(int i=1;i<=n;i++){
		if(ts[fin[i].id]>fin[i].zz){
			fl=1;
		}
	}
	if(fl==1){
		return 0; 
	}else{
		return 1;
	}
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i];
	for(int i=1;i<n;i++){
		int aa,bb;
		cin>>aa>>bb;
		add(aa,bb);add(bb,aa);
	}
	dfs(1,0);
	ll l=1,r=1e9+100000,ans=0;
	while(l<=r){
		ll mid=(l+r)/2;
		if(ck(mid))ans=mid,r=mid-1;
		else l=mid+1;
	}
	//ck(5);
	cout<<ans;
}
2024/10/17 20:03
加载中...