题目
有一张 个点的带权无向图,这张无向图是一张完全图。第
个点有一个点权
,边
的权值为
。
找一个这张图的边权之和最小的生成树。
解题思路
生成树有 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;
}
京公网安备 11010502036488号