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的更多相关文章
随机推荐
- 学习java编程能往哪些方向发展
当下Java训练非常热,是因为通过学习java能够快速的就业,这对于今年就业压力非常大的大学生来说,无疑是一条就业的捷路,虽然培教育费动辄过万,但还是非常值得的. 可是你可曾想过,学习了java编程后 ...
- Caffe2:ubuntu修改链接方式ln
参考:文件和目录命令-文件重定向 ln 使用caffe2,产生了此种情况: from caffe2.python import workspace >>WARNING:root:This ...
- 计组_IEEE754_练习题
IEEE754 阶码:移码:尾数:原码 一个规格化的32位浮点数x的真值可表示为: x=(-1)^s×(1. M) × 2^(E-127) e=E-127 其中尾数域 ...
- Python总结2
时间:25日上午'''列表定义:在[]内,可以存放多个任意类型的值,并以逗号隔开''''students=['sb','2b']print(students[1])student_info=['min ...
- JS练习:两级联动
代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...
- hdu 5176 The Experience of Love
The Experience of Love Accepts: 11 Submissions: 108 Time Limit: 4000/2000 MS (Java/Others) Memor ...
- PAT 1100. Mars Numbers
People on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars. T ...
- jquery源码分析(三)——工具函数
jQuery.extend({ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "&quo ...
- 混合了RBAC和ACL的权限系统(一) -- 用户组织结构
最近的工作是一个基础设计,打造一个基于RBAC和ACL的权限基础组件. 这个基础组件的特点是:同时混合了RBAC和ACL的认证方式,也就是说同时提供系统级别的授权(RBAC)和对象级别的授权(ACL) ...
- fzu 2122
#include<stdio.h> #include<string.h> #define N 51000 char s1[200],s2[200],s[N]; int main ...