文章
2
粉丝
127
获赞
2
访问
31.1k
使用优先队列解决(所有叶结点的值与权值(到根的路径长度)的乘积之和=非叶子节点之和)
升序队列,小顶堆:priority_queue <int,vector<int>,greater<int> > q; 降序队列,大顶堆:priority_queue <int,vector<int>,less<int> >q;
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin >> n){
priority_queue<int, vector<int>, greater<int> > q;
for(int i = 0 ; i < n; i++){
int x;
cin >> x;
q.push(x);
}
int a,b,ans=0;
while(q.size()!=1){
a = q.top();
q.pop();
b = q.top();
q.pop();
a = a+b;
ans += a;
q.push(a);
}
cout << ans << endl;
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发