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 }

你可能感兴趣的:(哈夫曼树)