求助csp-s T4
查看原帖
求助csp-s T4
235901
Always_Remember_It楼主2023/10/23 17:50
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+10;
const ll INF=1e9+10;
ll n,a[N],b[N],c[N];
ll head[N],tot;
ll tree[N],tim[N]={0,1},lst[N],minn=INF;
bool vis[N]={0,1};
struct Edge{
	ll next,to;
}e[N<<1];
void adde(ll u,ll v){
	e[++tot].next=head[u];
	e[tot].to=v;
	head[u]=tot;
}
void dfs(ll day,ll step){
	if(day>minn) return;
 	if(day>=n){
		for(ll i=1;i<=n;i++){
			if(c[i]==0){
				lst[i]=(a[i]-1)/b[i]+tim[i];
				continue;
			}
			ll now=(1-b[i])/c[i];
			if(c[i]<0){
				ll pour=(now*b[i])+(now+1)*now/2*c[i];
				if(pour<a[i]){
					lst[i]=a[i]-pour+now+tim[i]-1;
					continue;
				}
			}
			if(c[i]>0) now=1000000000;
			ll l=1,r=now,mid=0,ans=INF;
			while(l<=r){
				mid=(l+r)>>1;
				ll check=(mid*b[i])+(mid+1)*mid/2*c[i];
				if(check>=a[i]) ans=min(ans,mid),r=mid-1;
				else l=mid+1;
			}
			lst[i]=ans;
		}
		ll maxn=0;
		for(ll i=1;i<=n;i++){
			if(lst[i]>maxn) maxn=lst[i];
		}
		minn=min(minn,maxn);
		return;
	}
	for(ll i=1;i<=n;i++){
		if(!vis[i]) continue;
		for(ll j=head[i];j;j=e[j].next){
			ll v=e[j].to;
			if(vis[v]) continue;
			vis[v]=1;
			tim[v]=step+1;
			dfs(day+1,step+1);
			vis[v]=0;
		}
	}
}
int main(){
	cin>>n;
	for(ll i=1;i<=n;i++){
		cin>>a[i]>>b[i]>>c[i];
	}
	for(ll i=1;i<n;i++){
		ll u,v;cin>>u>>v;
		adde(u,v);
		adde(v,u);
	}
	dfs(1,1);
	cout<<minn<<endl;
	return 0;
}
全TLE了,这是为什么?
还有我把 if(lst[i]>maxn) maxn=lst[i];删了就不会TLE了,这又是为什么
2023/10/23 17:50
加载中...