51分求调
查看原帖
51分求调
978188
T21C0637楼主2025/7/24 21:46

rt 其实样例2也没过( 有无巨佬帮忙调一下,本人已崩溃

#include<bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long LL;
const LL N=400;
vector<pair<LL,LL> >v[N],q;
LL n,s,len,vis[N],Ans=1e18,maxs,p;
void dfs1(LL u,LL fa,LL d){
	if(d>maxs) maxs=d,p=u;
	for(int i=0;i<v[u].size();i++){
		if(v[u][i].first==fa) continue;
		dfs1(v[u][i].first,u,d+v[u][i].second);
	}
}
LL dfs2(LL u,LL fa){
	LL maxs=0,ansNum=u,ansW=0;
	for(int i=0;i<v[u].size();i++){
		if(v[u][i].first==fa) continue;
		LL k=dfs2(v[u][i].first,u),w=v[u][i].second;
		if(k+w>maxs) maxs=k+w,ansNum=v[u][i].first,ansW=w;
	}
	if(ansNum!=u) q.push_back({ansNum,ansW});
	return maxs;
}
void dfs3(LL l,LL r,LL u,LL fa,LL d){
	maxs=max(maxs,d);
	for(int i=0;i<v[u].size();i++){
		LL k=v[u][i].first;
		if(k==fa) continue;
		if(l<=vis[k]&&vis[k]<=r) dfs3(l,r,k,u,0);
		else dfs3(l,r,k,u,d+v[u][i].second);
	}
}
LL ECC(LL x,LL y){
	maxs=0;
	dfs3(vis[x],vis[y],x,0,0);
	return maxs;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>s;
	for(int i=1,x,y,w;i<n;i++){
		cin>>x>>y>>w;
		v[x].push_back({y,w});
		v[y].push_back({x,w});
	}
	dfs1(1,0,0);
	dfs2(p,0);
	q.push_back({p,0});
	for(int i=0;i<q.size();i++) vis[q[i].first]=++len;
	for(int i=0;i<q.size();i++){
		LL sum=0;
		for(int j=i;j<q.size();j++){
			if(j>i) sum+=q[j].second;
			if(sum>s) break;
			Ans=min(Ans,ECC(q[i].first,q[j].first));
		}
	}
	cout<<Ans;
	return 0;
}
2025/7/24 21:46
加载中...