JD 1172:哈夫曼树

来源:互联网 发布:小啰啰崩没哏网络直播 编辑:程序博客网 时间:2024/06/11 21:51

OJ题目:click here~~

题目分析:百度百科哈夫曼树

给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。带权路径长度WPL=  所有的非叶子节点之和。

AC_CODE

int main(){    int n ;    priority_queue< int, vector<int> , greater<int> > que ;    while(scanf("%d",&n) != EOF){        int ans = 0 ;        while(!que.empty()) que.pop() ;        int x , i ;        for(i = 0;i < n;i++){            scanf("%d",&x) ;            que.push(x) ;        }        while(que.size() > 1){            int a = que.top() ; que.pop() ;            int b = que.top() ; que.pop() ;            ans += (a + b) ;            que.push(a + b) ;        }        cout << ans << endl ;    }}


0 0
原创粉丝点击