码迷,mamicode.com
首页 > 其他好文 > 详细

Safe Or Unsafe--hdu2527(哈夫曼树求WPL)

时间:2015-12-29 14:16:09      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2527

用优先队列模拟

技术分享
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define N 1100
#define met(a, b) memset(a, b, sizeof(a))

struct node
{
    int x;

    friend bool operator<(node a, node b)///优先队列,实质是堆;
    {
        return a.x > b.x;
    }
};

int main()
{
    int T, n;
    int cnt[N];
    char s[N];

    scanf("%d", &T);

    while(T--)
    {
        met(s, 0);
        met(cnt, 0);

        scanf("%d", &n);
        scanf("%s", s);

        int len = strlen(s);
        for(int i=0; i<len; i++)
            cnt[s[i]-a]++;

        priority_queue<node> Q;

        node p, q;

        for(int i=0; i<26; i++)
        {
            p.x = cnt[i];
            if(cnt[i])
                Q.push(p);
        }

        int ans = 0 ;

        if(Q.size()==1)///如果只有一个元素WPL是本身;
            ans = Q.top().x;

        while(Q.size()!=1)
        {
            node min1 = Q.top(); Q.pop();///找到两个权值最小的,构成新的节点
            node min2 = Q.top(); Q.pop();

            q.x = min1.x + min2.x; Q.push(q);

            ans += q.x;
        }
       /// printf("%d\n", ans);
        printf(ans <= n ? "yes\n":"no\n");
    }
    return 0;
}
View Code

 

Safe Or Unsafe--hdu2527(哈夫曼树求WPL)

标签:

原文地址:http://www.cnblogs.com/zhengguiping--9876/p/5085415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!