首页 > 代码库 > poj 3253 Fence Repair(优先队列+哈夫曼树)
poj 3253 Fence Repair(优先队列+哈夫曼树)
题目地址:POJ 3253
哈夫曼树的结构就是一个二叉树,每一个父节点都是两个子节点的和。这个题就是可以从子节点向根节点推。
每次选择两个最小的进行合并。将合并后的值继续加进优先队列中。直至还剩下一个元素为止。
代码如下:
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include<algorithm> using namespace std; struct node { __int64 x; bool operator <(const node &a) const { return x>a.x; } }; int main() { __int64 n, i, j, x, ans; while(scanf("%I64d",&n)!=EOF) { ans=0; priority_queue<node>q; node p, f1, f2, s; for(i=0; i<n; i++) { scanf("%I64d",&p.x); q.push(p); } while(!q.empty()) { f1=q.top(); q.pop(); if(q.empty()) { break; } f2=q.top(); q.pop(); s.x=f1.x+f2.x; q.push(s); //printf("%d %d\n",f1.x,f2.x); ans+=s.x; } printf("%I64d\n",ans); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。