哈夫曼树,第一行输入一个数n,表示叶结点的个数。
需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出哈夫曼树的带权路径长度(WPL)。
输入格式:
第一行输入一个数n,第二行输入n个叶结点(叶结点权值不超过1000,2<=n<=1000)。
输出格式:
在一行中输出WPL值。
输入样例:
5
1 2 2 5 9
输出样例:
37
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int n , a[N];
int main() {
cin >> n;
priority_queue<int, vector<int>, greater<int>> heap;
for (int i = 1; i <= n; ++ i) {
cin >> a[i];
heap.push(a[i]);
}
int ans = 0;
while (heap.size() > 1) {
auto t1 = heap.top();
heap.pop();
auto t2 = heap.top();
heap.pop();
ans += t1 + t2;
heap.push(t1 + t2);
}
cout << ans << "\n";
return 0;
}