图片说明
题意:有一棵树,有n个节点。让你分成n/2对。所有对之间的距离和最小。
思路:我们尽量让每条边不重复经过。那么对于一棵子树v。和他的父亲节点u。还有之间的边权w。如果siz[u]%2==1那么v就和u连。ans+=w。如果siz[u]%2==0那么v和自己的子树连过了。不加w的贡献。

#include <bits/stdc++.h>
using namespace std;
#define LL long long

vector<vector<pair<int , LL> > > v(10005);
LL ans=0;

int DFS(int u, int fa, int w){
    int cut=1;
    for(auto x: v[u]){
        if(x.first!=fa){
            cut+=DFS(x.first, u, x.second);
        }
    }
    if(cut%2){
        ans+=w;
    }
    return cut;
}
int main(){

    int t; scanf("%d", &t);
    while(t--){
        int n, x, y, z; scanf("%d",&n);
        for(int i=1; i<n; i++){
            scanf("%d%d%d", &x, &y, &z);
            v[x].push_back({y, z});
            v[y].push_back({x, z});
        }
        ans=0;
        DFS(1, 0, 0);
        for(int i=1; i<=n; i++) v[i].clear();
        printf("%lld\n", ans);
    }

    return 0;
}