# 題目
AP325 Q-8-15. 樹上一位不回家的推銷員
# 解題思路
目前沒東西...
# 程式碼
#include<bits/stdc++.h> | |
using namespace std; | |
#define N 500005 | |
vector<pair<int,int>> adj[N]; | |
int dis[N]={0}; | |
void dfs_dis(int v,int p){ | |
for(auto e:adj[v]){ | |
int u=e.first,w=e.second; | |
if(u==p) continue; | |
dis[u]+=dis[v]+w; | |
dfs_dis(u,v); | |
} | |
} | |
int dis_temp[N]={0}; | |
void dfs_disw(int v,int p){ | |
for(auto e:adj[v]){ | |
int u=e.first,w=e.second; | |
if(u==p) continue; | |
dis_temp[u]+=dis_temp[v]+w; | |
dfs_disw(u,v); | |
dis[v]+=dis[u]+w; | |
} | |
} | |
int main(){ | |
int n; | |
cin>>n; | |
for(int i=1,u,v,w;i<n;i++){ | |
cin>>u>>v>>w; | |
adj[u].push_back({v,w}); | |
adj[v].push_back({u,w}); | |
} | |
dfs_dis(1,-1); | |
int farthest=max_element(dis,dis+n)-dis;// 取點 | |
memset(dis,0,sizeof(dis)); | |
dfs_disw(farthest,-1); | |
int mx=dis[farthest]; | |
farthest=*max_element(dis_temp,dis_temp+n);// 取值 | |
mx=mx*2-farthest; | |
cout<<mx; | |
return 0; | |
} |