16分求调
查看原帖
16分求调
1199908
GeXiaoWei楼主2024/3/22 21:26
#include<bits/stdc++.h>
using namespace std;
long long n,m,a,b,c,head[2000005],cnt=1,maxdis,maxu,f[20000005],o,k,f2[2000005],ans2,kkk;
struct node{
    long long to,nxt,w;
}edge[2000005];
void add(long long u,long long v,long long ww){
    edge[cnt].to=v,edge[cnt].w=ww;
    edge[cnt].nxt=head[u];
    head[u]=cnt++;
}
void dfs(long long u,long long fa,long long dis){
    if(dis>maxdis) maxdis=dis,maxu=u;
	for(long long i=head[u];i;i=edge[i].nxt) if(edge[i].to!=fa) dfs(edge[i].to,u,dis+edge[i].w);
}
void dfs2(long long x,long long fa){
	for(long long i=head[x];i;i=edge[i].nxt){
		if(edge[i].to!=fa){
			f[edge[i].to]=f[x]+edge[i].w;
			dfs2(edge[i].nxt,x);
		}
	}
}
void dfs3(long long x,long long fa){
	for(long long i=head[x];i;i=edge[i].nxt){
		if(edge[i].to!=fa){
			f2[edge[i].to]=f[x]+edge[i].w;
			dfs3(edge[i].nxt,x);
		}
	}
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(int i=0;i<m;i++){
	    scanf("%lld%lld%lld",&a,&b,&c);
	    add(a,b,c),add(b,a,c);
	}
	dfs(1,0,0);
	k=maxu,maxdis=0;
	dfs(maxu,0,0);
	o=maxu;
	dfs2(k,0);
	dfs3(o,0);
	for(int i=1;i<=n;i++) ans2=max(ans2,min(f[i],f2[i]));
	printf("%lld",k+ans2);
	return 0;
}
2024/3/22 21:26
加载中...