请问我这份代码34行re的原因是:
  • 板块学术版
  • 楼主PNNNN
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/2 22:27
  • 上次更新2023/11/3 11:16:51
查看原帖
请问我这份代码34行re的原因是:
556975
PNNNN楼主2023/11/2 22:27
#include<bits/stdc++.h>
#define int long long
#define mk make_pair
using namespace std;

int n,a[100005],b[100005],c[100005];

int l,r,mid,ans;

int t[100005],s[100005],v[100005];

vector <int> to[100005];

const __int128 turn=1;

inline void dfs(int x,int last){
	s[x]=t[x],v[x]=0;
	for(int y:to[x]){
		if(y==last)continue;
		dfs(y,x),s[x]=min(s[x],s[y]-1);
	}
	return;
}

priority_queue <pair<int,int> > q;

inline bool check(){
	for(int i=1;i<=n;i++){
		int ll=0,rr=mid;t[i]=-1;
		while(ll<=rr){
			int mmid=ll+rr>>1,day=(1-b[i])/c[i];
			__int128 res=0;
			if(c[i]>=0||c[i]<0&&day>=mid){
				res=b[i]*turn*(mid-mmid+1)+c[i]*turn*(mid+mmid)*(mid-mmid+1)/2;//这里%%%%%%%%%%%%% 
			}else if(day<mmid)res=mid-mmid+1;
			else res=b[i]*turn*(day-mmid+1)+c[i]*turn*(day+mmid)*(day-mmid+1)/2+mid-day;
			if(res>=a[i])t[i]=ll=mmid,ll++;
			else rr=mmid-1;
		}
		if(t[i]<0)return false;
	}dfs(1,0);while(q.size())q.pop();q.push(mk(-s[1],1));
	int cnt=0;
	while(!q.empty()){
		int x=q.top().second;q.pop();
		v[x]=1,cnt++;
		if(cnt>t[x]){
			return false;
		}
		for(int y:to[x]){
			if(v[y])continue;
			q.push(mk(-s[y],y));
		}
	}
	return true;
}

inline int read(){
	register int x(0),t(0);
	static char ch=getchar();
	while(!isdigit(ch)){t|=(ch=='-');ch=getchar();}
	while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return t?-x:x;
}

signed main(){
    n=read();
    for(int i=1;i<=n;i++){
    	a[i]=read(),b[i]=read(),c[i]=read();
	}
	for(int i=1;i<n;i++){
		int x=read(),y=read();
		to[x].push_back(y),to[y].push_back(x);
	}
	l=0,r=2e9;
	while(l<=r){
		mid=l+r>>1;
		if(check())r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans;
//	for(int i=1;i<=n;i++){
//		int tmp=(b[i]+c[i]-1)*-1,res;
//		if(c[i]!=0)tmp/=c[i];
//		else{
//			if(b[i]>0)tmp=1;else tmp=1e18;
//		}
//		cout<<tmp<<' ';
//	}
	return 0;
}
2023/11/2 22:27
加载中...