首页 > 代码库 > POJ 3253 Fence Repair(优先队列,哈夫曼树)

POJ 3253 Fence Repair(优先队列,哈夫曼树)

题目

 

//做哈夫曼树时,可以用优先队列(误?)

//这道题教我们优先队列的一个用法:取前n个数(最大的或者最小的)

 

//哈夫曼树//64位//超时->优先队列,,,,//这道题的优先队列用于取前2个小的元素#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>using namespace std;__int64 ans,a[20010];int n;struct cmp{      bool operator ()(__int64 &a,__int64 &b){          return a>b;    }  };priority_queue<__int64,vector<__int64>,cmp> q;void hfm(){        __int64 min1,min2,neww,yi;    while(n>1)    {        yi=0;        min1=q.top();        q.pop();        min2=q.top();        q.pop();        neww=min1+min2;        ans+=neww;        q.push(neww);        n--;    }}int main(){    int i;    while(scanf("%d",&n)!=EOF)    {        while(!q.empty())q.pop();        for(i=0;i<n;i++)        {            scanf("%I64d",&a[i]);            q.push(a[i]);        }        ans=0;        if(n>1)            hfm();        else            ans=a[0];        printf("%I64d\n",ans);    }    return 0;}
View Code