POJ 3253 Fence Repair(哈夫曼树)

题目链接

用优先队列,特别方便。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <queue>
 4 #include <vector>
 5 #include <algorithm>
 6 using namespace std;
 7 int main()
 8 {
 9     int n,i;
10     __int64 sum,a,b;
11     scanf("%d",&n);
12     priority_queue< __int64 ,vector<__int64>,greater<__int64> > q;
13     for(i = 1;i <= n;i ++)
14     {
15         scanf("%I64d",&a);
16         q.push(a);
17     }
18     sum = 0;
19     for(i = 1;i <= n-1;i ++)
20     {
21         a = q.top();
22         q.pop();
23         b = q.top();
24         q.pop();
25         sum += a+b;
26         q.push(a+b);
27     }
28     printf("%I64d\n",sum);
29     return 0;
30 }
posted @ 2012-07-23 13:21  Naix_x  阅读(190)  评论(0编辑  收藏  举报