1 条题解

  • 0
    @ 2023-11-5 22:59:57

    找最深的树链就行了,不必多言

    #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
    上传者