优先队列打哈弗曼树

#include<bits/stdc++.h>
using namespace std;
int a[10000];
int main()

{
    int n,a1,a2,i;

    int sum=0;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    priority_queue<int , vector<int> , greater<int> >q;
    for(i=0;i<n;i++)
    {
        q.push(a[i]);
    }
    while(q.size()>1)
    {
        a1=q.top();
        q.pop();
        a2=q.top();
        q.pop();
        sum+=a1+a2;
        q.push(a1+a2);
    }
    cout<<sum<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41049928/article/details/80639090