T1 树学

题目

【问题描述】

给定一颗 n 个点的树,树边带权,试求一个排列 P,最大化下式

泉五培训Day1

其中,calc(a, b)表示树上由a到b经过的最大边权。

【输入格式】

第一行一个整数 n,表示点数下接 n − 1 行,每行三个数 u, v, w 表示一条连接点 u 和点 v 权值为 w

【输出格式】

总共一行一个整数,表示答案

【输入样例】

2

1 2 2333

【输出样例】

2333

【数据范围】

对于前5%的数据满足 n ≤ 8

对于前40%的数据满足 n ≤ 20

对于前60%的数据满足 n ≤ 200

对于100%的数据满足 n ≤ 100

解析

先从边权最小的边开始累加,尽可能的减少当前边的贡献次数。发现每轮最少贡献一次,即将边两侧的点在P中完全分开。

试过多组数据之后,不难发现,答案即为所有边权之和。

1、最长边只计算过一次。

2、如果次长边被经过两次及以上,从次长边的一端出发,到了最长边的一端,走了一个来回,很显然,这是错误的,所以,次长边只计算过一次。

3、以此类推,最后,所有边都只计算过一次。

Code

#include <iostream>
#include <cstdio>
using namespace std;
int n,u,v,w;
long long ans;
int main()
{
    cin>>n;
    for(int i=1;i<n;i++)
    {
        cin>>u>>v>>w;
        ans+=w;
    }
    cout<<ans;
    return 0;
}
View Code

相关文章: