求调MLE 52分玄关
查看原帖
求调MLE 52分玄关
1178364
WvWeet楼主2024/10/28 21:48

求调MLE

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
int n,m,kk=0;
ll dis[N],ans=0;
int vis[N],fa[N],id[N];
vector<pair<int,int>> g[N];

void dfs1(int u,int f){
	if(dis[u]>dis[kk]) kk=u;
	for(auto [v,w]:g[u]){
		if(v==f) continue;
		dis[v]=dis[u]+w;
		dfs1(v,u);
	}
}

void dfs2(int u,int f){
	if(dis[u]>dis[kk]) kk=u;
	for(auto [v,w]:g[u]){
		if(v==f) continue;
		fa[v]=u;
		dis[v]=dis[u]+w;
		dfs2(v,u);
	}
}

void dfs(int u,int f,int fac){
	id[u]=fac;
	for(auto [v,w]:g[u]){
		if(v==f||vis[v]) continue;
		dfs(v,w,fac);
	}
}

void vvvvt()
{
	cin>>n>>m;
	for(int i=1;i<n;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back({v,w});
		g[v].push_back({u,w});
	}
	dfs1(1,0);
	dis[kk]=0;
	dfs2(kk,0);
	for(int i=kk;i;i=fa[i]){
		vis[i]=1;
	}
	for(int i=kk;i;i=fa[i]){
		dfs(i,0,i);
	}
	for(int i=1;i<=n;i++){
//		if(vis[i]==1) continue;
		ans=max(ans,dis[kk]+min(dis[kk]-dis[id[i]],dis[id[i]])+dis[i]-dis[id[i]]);
	}
	cout<<ans<<'\n';
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int _=1;
//	cin>>_;
	while(_--) vvvvt();
	return 0;
}
2024/10/28 21:48
加载中...