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