板子1,也是POJ3523的AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn = 2e4+8;
//哈夫曼树
int main()
{
int a[maxn];
int n;//一共有n个叶子节点
long long ans=0;
while(cin >> n)
{
for(int i = 0; i < n; i ++)
cin >> a[i];
while(n>1)
{
int m1 = 0, m2 = 1;//最小和次小
if(a[m1] > a[m2])swap(m1,m2);
for(int i = 2; i < n; i ++)
{
if(a[i]<a[m1])
{
m2 = m1;
m1 = i;
}
else if(a[i] < a[m2])
{
m2 = i;
}
}
long long t = a[m1]+a[m2];
ans += t;
if(m1==n-1)swap(m1,m2);
a[m1] = t;
a[m2] = a[n-1];
n--;
}
cout << ans << endl;
}
return 0;
}