贪心——最小生成树
题目描述
小 A 有一张 n 个点的带权无向图,这张无向图非常特别,首先第 i 个点有一个点权 ai,之后这张无向图是一张完全图,且边 (u,v) 的权值为 au+av
现在小 A 想找一个这张图的边权之和最小的生成树,需要你来帮帮他
输入描述:
第一行一个正整数 n
第二行 n 个整数 a1,a2…an
输出描述:
输出边权和最小的生成树的边权之和。
示例
输入
3
1 2 3
输出
7
备注:
1≤ n≤ 1e5
0≤ ai≤ 1e9
分析
这题只要找出点权最小的那个点,后面的点的点权都加上这个点的点权,最后再算出总值即可。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
int main()
{
int n;
ll a[100001],sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
sum+=a[i];
}
sort(a,a+n);
sum+=(n-2)*a[0];
cout<<sum<<endl;
return 0;
}