基础训练 Huffuman树

Huffuman树

/*解法一*/
#include<iostream>
#include<queue>
using namespace std;
int main(){
    priority_queue< int, vector<int>, greater<int> > q;
    int n, t, sum = 0;
    cin>>n;
    for( int i=0; i<n; i++ ) {
        cin>>t;
        q.push( t );
    }
    while( q.size() != 1 ){
        int a = q.top();
        q.pop();
        int b = q.top();
        q.pop();
        int c = a + b;
        sum += c;
        q.push( c );
    }
    cout<<sum<<endl;
    return 0;
} 
/*解法二*/
#include<iostream>
#include<set>
using namespace std;
int main(){
    multiset<int> s;
    int n, t, sum = 0;
    cin>>n;
    for( int i = 0; i < n; i++ ) {
        cin>>t;
        s.insert(t);
    }
    while( s.size() != 1 ) {
        int a = *( s.begin() );
        s.erase( s.begin() );
        int b = *( s.begin() );
        s.erase( s.begin() );
        int c = a + b;
        sum += c;
        s.insert(c);
    }
    cout<<sum<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/A-Little-Nut/p/10335773.html