题解 | 哈夫曼树
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
priority_queue<int, vector<int>, greater<int>> myqueue;// 小顶堆
int main() {
int n;
while (cin >> n) {
int temp;
int answer = 0;
for (int i = 0; i < n; i ++) {
cin >> temp;
myqueue.push(temp);
}
while (myqueue.size() > 1) {
int a = myqueue.top();
myqueue.pop();
int b = myqueue.top();
myqueue.pop();
answer = answer + a + b;
myqueue.push(a + b);
}
cout << answer << endl;
}
}
