题目

有一张 个点的带权无向图,这张无向图是一张完全图。第 个点有一个点权 ,边 的权值为
找一个这张图的边权之和最小的生成树。

解题思路

生成树有 n-1 条边,每个的点权至少要加一次。
选取点权最小的那个点作为根节点,将其他的点都作为该节点的子节点,即是边权之和的最小生成树。
注意:当只有 1 个点时,没有边,边权之和为 0。

C++代码

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    int a;
    int m = 1e9+1;
    long long sum = 0;
    for(int i=0; i<n; ++i){
        cin >> a;
        m = min(m, a);
        sum += a;
    }
    if(n==1)
        sum = 0;
    else if(n>2)
        sum += 1LL*(n-2)*m;
    cout << sum << endl;
    return 0;
}