LA4122
哈夫曼树+搜索
抄了抄代码
先开始不知道怎么限制哈夫曼树,然后看了看代码,是用bfs序来限制。因为每个节点的右子树节点肯定不小于左儿子,同一层也是。所以先搞出bfs序,然后搜索,判断每一层右边是否大于左边。
哈夫曼树的每个节点必然会有零个或两个儿子,这也是判断无解或有解的情况。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
string s;
int n, cnt, ans, root, now, kase;
int child[N][], val[N], pos[N];
vector<int> order;
void insert(int x)
{
for(int i = ; i < s.length(); ++i)
{
int t = s[i] - '';
if(!child[x][t])
child[x][t] = ++cnt;
x = child[x][t];
}
}
void dfs(int u)
{
if(pos[u] == order.size() - )
{
++ans;
return;
}
if(child[u][] == )
{
dfs(order[pos[u] + ]);
return;
}
for(int i = ; i * <= val[u]; ++i)
{
val[child[u][]] = i;
val[child[u][]] = val[u] - i;
if(val[order[pos[child[u][]] - ]] && val[order[pos[child[u][]] - ]] < val[child[u][]]) continue;
dfs(order[pos[u] + ]);
}
val[child[u][]] = val[child[u][]] = ;
}
bool build()
{
for(int i = ; i <= cnt; ++i) if(child[i][] * child[i][] == && child[i][] + child[i][])
return ;
queue<int> q;
order.clear();
q.push();
while(!q.empty())
{
int u = q.front();
q.pop();
pos[u] = order.size();
order.push_back(u);
if(child[u][]) q.push(child[u][]);
if(child[u][]) q.push(child[u][]);
}
return true;
}
int main()
{
while(cin >> n)
{
if(!n)
break;
memset(child, , sizeof(child));
ans = ;
cnt = ;
root = ++cnt;
for(int i = ; i <= n; ++i)
{
cin >> s;
insert(root);
}
printf("Case %d: ", ++kase);
if(!build())
{
puts("");
continue;
}
val[] = ;
dfs();
cout << ans << endl;
}
return ;
}
LA4122的更多相关文章
随机推荐
- html5——背景
背景大小 background-size: % %;//宽 高 background-size: 100px 100px;//宽 高 background-size: cover;//覆盖,图片会完全 ...
- 开源业务规则引擎JBoss Drools
Drools 是什么? 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规 ...
- 用nginx实现分布式限流
1.前言 一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流 . 本文主要阐述如何用nginx 来实现限流. 听说 Hystrix 也可 ...
- 【YOLO】只检测人
一.修改源代码 cfg/coco.data classes= #修改成1 train = /home/pjreddie/data/coco/trainvalno5k.txt valid = coco_ ...
- Nginx 监控
编译安装加上http_stub_status_module 模块 location /status { stub_status on; # access_log /usr/local/nginx/lo ...
- which
功能说明:显示命令的全路径. 参数选项: -a 默认在PATH路径中由前往后查找命令,如果查找到了,就停止匹配.使用-a选项将遍历所有PATH路径,输出所有匹配项. 参数-a把所有匹配命令路 ...
- HDU_2203_KMP入门
亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- mysql动态执行sql批量删除数据
CREATE PROCEDURE `sp_delete_pushmsg_data`() BEGIN ); ); declare l_dutyno int; ; ; ; ; day),'%Y-%m-%d ...
- Django - 数据获取
Django - 数据获取 1.radio值获取 2.checkbox获取 3.select 获取 select 获取值,需要根据前端multiple来获取,get or getlist; 4.上传文 ...
- ionic使用cryptojs加密 复制到黏贴版 使用md5
npm install crypto-js npm install --save @types/crypto-js import * as crypto from "crypto-js&qu ...