第13届东北四省赛补题

Problem - E - Codeforces

题意就是给一颗树G,然后图L(G)定义为,把树的每条边作为节点,相邻的两条边(在图G中共享一个节点的边)之间有一条路径,路径的权值为这两条边的权值和。求图L(G)的最小生成树。

#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
const int N = 100010;
vector<int> f[N];
int main()
{
    int t;
    scanf("%d", &t);

    while (t--)
    {
        ll ans = 0;
        int n, x, y, z;
        scanf("%d", &n);

        for (int i = 1; i <= n; i++)    f[i].clear();

        for (int i = 1; i < n; i++)
        {
            scanf("%d%d%d", &x, &y, &z);
            f[x].push_back(z);
            f[y].push_back(z);
        }
        
        for (int i = 1; i <= n; i++)
        {
            if (f[i].size() > 1)
            {
                sort(f[i].begin(), f[i].end());
                for (int j = 1; j < f[i].size(); j++)   ans += f[i][0] + f[i][j];
            }

        }

        printf("%lld\n", ans);
    }

    return 0;
}

 

posted on 2023-04-15 20:52  玛卡巴卡要ac  阅读(32)  评论(0)    收藏  举报

导航