思路
题中给定的是一棵树,要求把分成n/2对 让权值最小
看一下范围 在加上是一棵树 所以做法应该是dfs 复杂度为on
直接去考虑贡献
设当前父节点为x 如果x的子树(包括x自己)的大小是个奇数 意味着什么呢
因为要两两配对,那么意味着这奇数个数中,一定有一个数要有外界配对
那么他就一定会经过x到x的父节点的那条边

所以dfs 计算子树的大小 如果子树大小是个奇数,那么对答案有贡献 就要加上父节点往上连接的那一条边

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e4+5;
ll ans;
struct node
{
    int to;
    ll v;
};
int siz[maxn];
vector<node> e[maxn];
void dfs(int x,int f,ll w){

    for(auto it:e[x]){
        if(it.to==f) continue;
        dfs(it.to,x,it.v);
        siz[x]+=siz[it.to];
    }
    if(siz[x]&1) ans+=w;
}
int main(){
    ios::sync_with_stdio(0);
    int _;cin>>_;
    while(_--){
        int n;cin>>n;ans=0;
        for(int i=1;i<=n;i++) e[i].clear(),siz[i]=1;
        for(int i=1;i<n;i++){
            int x,y,v;cin>>x>>y>>v;
            e[x].push_back({y,v});
            e[y].push_back({x,v});
        }
        dfs(1,0,0);
        cout<<ans<<endl;
    }
}