1 条题解
-
0
找最深的树链就行了,不必多言
#include<bits/stdc++.h> #define int long long #define inf 0x3f3f3f3f3f3f3f3f #define For(i,a,b) for(int i=(a);i<=(b);i++) #define foR(i,a,b) for(int i=(a);i>=(b);i--) using namespace std; const int N=1e5+5; struct node{int u,v,w,nxt;}e[N<<1]; int h[N<<1],num_e=0; inline void add(int x,int y,int z) {e[++num_e]=(node){x,y,z,h[x]},h[x]=num_e;} int n; int dep[N]; int mx=0,sum=0; inline void dfs(int x,int fa) { for(int i=h[x];i;i=e[i].nxt) { int y=e[i].v,w=e[i].w; if(y==fa) continue; dep[y]=dep[x]+w; dfs(y,x); mx=max(mx,dep[y]); } return; } signed main() { cin>>n; For(i,1,n-1) { int x,y,z; scanf("%lld%lld%lld",&x,&y,&z); add(x,y,z),add(y,x,z); } dfs(1,0); For(i,1,num_e) sum+=e[i].w; cout<<sum-mx; return 0; } /* 6 1 2 3 1 3 4 1 4 6 2 5 5 3 6 4 */
- 1
信息
- ID
- 4
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 8
- 已通过
- 3
- 上传者