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 }
代码君

 

你可能感兴趣的:(Huffman)