萌新刚学OI,Wa第六个点求助。
查看原帖
萌新刚学OI,Wa第六个点求助。
135258
charm1楼主2021/2/16 20:39

Rt,代码如下

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=200005;
int n,m,p,q,cnt;
int dep[maxn],dis1[maxn],dis2[maxn],head[maxn];
struct edge{
	int v,val,nxt;
}a[maxn<<1];
inline int read(){
	int ret=0,f=1;	char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
	while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
	return ret*f; 
}
void add(int x,int y,int val){
	++cnt;
	a[cnt].v  =y;
	a[cnt].val=val;
	a[cnt].nxt=head[x];
	head[x]=cnt;
}
void scan(){
	int k,j,i;
	n=read();	read();
	for(k=1;k<n;k++){
		int x,y,val;
		x=read();	y=read();	val=read();
		add(x,y,val);	add(y,x,val);
	}
}
void dfs(int x,int f){
	int k,j,i;
	if(dep[x]>dep[m])	m=x;
	for(k=head[x];k;k=a[k].nxt){
		int v=a[k].v,val=a[k].val;
		if(v==f)	continue;
		dep[v]=dep[x]+val;
		dfs(v,x);
	}
}
void solve(){
	dfs(1,0);	p=m;	m=0;
	memset(dep,0,sizeof(dep));
	dfs(p,0);	q=m;	m=0;
	memcpy(dis1,dep,maxn);
	memset(dep,0,sizeof(dep));
	dfs(q,0);
	memcpy(dis2,dep,maxn);
	memset(dep,0,sizeof(dep));
}
void print(){
	int k,j,i;	int ans=0;
	for(k=1;k<=n;k++)
	ans=max(ans,min(dis1[k],dis2[k]));
	ans+=dis1[q];
	printf("%lld\n",ans);
}
signed main(){
	int k,j,i;
	scan();	solve();	print();
	return 0;
}
2021/2/16 20:39
加载中...