首页 > 代码库 > 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。