[ABC361E] Tree and Hamilton Path 2 题解
第一次
先假定根结点为
如果根结点不为
放代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;
main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,c=0; cin>>n;
vector<vector<pii> > g(n);
for(int i=1;i<n;i++){
int u,v,w; cin>>u>>v>>w,c+=w<<1;
g[--u].emplace_back(--v,w);
g[v].emplace_back(u,w);
}
vector<int> d(n);
function<void(int,int)> dfs=[&](int u,int f){
for(auto [i,w]:g[u])
if(i!=f)d[i]=d[u]+w,dfs(i,u);
}; // 两遍 dfs 求直径
dfs(0,0);
int rt=max_element(d.begin(),d.end())-d.begin();
fill(d.begin(),d.end(),0);
dfs(rt,rt);
cout<<c-*max_element(d.begin(),d.end())<<endl;
return 0;
}