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 }