每次取出两个优先队列中最小的合并 然后再加入队列中
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> > q;//取最小的优先队列
int main(){
int n,a,x,y;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
q.push(a);
}
int ans=0;
while(q.size()>1){//当小于等于1时说明合并完成
x=q.top();
q.pop();
y=q.top();
q.pop();
ans+=x+y;
q.push(x+y);
}
cout<<ans<<endl;
return 0;
}