UVa 10954 (Huffman 优先队列) Add All

直接用一个优先队列去模拟Huffman树的建立过程。

每次取优先队列前两个数,然后累加其和,把这个和在放入到优先队列中去。

 1 #include <cstdio>
 2 #include <queue>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n;
 8     while(scanf("%d", &n) == 1 && n)
 9     {
10         priority_queue<int, vector<int>, greater<int> > q;
11         int x, ans = 0;
12         for(int i = 0; i < n; i++) { scanf("%d", &x); q.push(x); }
13         for(int i = 0; i < n-1; i++)
14         {
15             int a = q.top(); q.pop();
16             int b = q.top(); q.pop();
17             ans += a + b;
18             q.push(a + b);
19         }
20         printf("%d\n", ans);
21     }
22 
23     return 0;
24 }
代码君

 

posted @ 2015-04-13 18:37  AOQNRMGYXLMV  阅读(164)  评论(0编辑  收藏  举报