哈夫曼树嘛, 底层和优先队列是一样的。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
priority_queue<int, vector<int>, greater<int>> q;
while(n -- ) {
int x; cin >> x;
q.push(x);
}
int ans = 0;
while(q.size() > 1) {
int a = q.top();
ans += a;
q.pop();
int b = q.top();
ans += b;
q.pop();
q.push(a + b);
}
cout << ans << endl;
return 0;
}