BZOJ 1195: [HNOI2006]最短母串 AC自动机+状压+搜索
思路比较直接.
由于 $n$ 很小,直接定义 $f[i][j]$ 表示当前在自动机中的节点 $i,$ 被覆盖串的集合为 $j$ 的方案数.
#include <bits/stdc++.h>
#define N 750
#define M 150000
#define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout)
using namespace std;
int n,tot,edges,kk;
int Log[30],hd[N],to[N],nex[N],mark[N][5000],fa[M*10],C[M*10];
char str[N];
queue<int>q;
struct Sta
{
int u,sta,id;
Sta(int u=0,int sta=0,int id=0):u(u),sta(sta),id(id){}
};
queue<Sta>Q;
struct Node
{
int sta,f,tag,ch[27];
}t[N];
void add(int u,int v)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void insert(int xx)
{
int p=0,i,j,len=strlen(str+1);
for(i=1;i<=len;++i)
{
int c=str[i]-'A';
if(!t[p].ch[c]) t[p].ch[c]=++tot;
p=t[p].ch[c];
}
t[p].tag=1;
t[p].sta|=Log[xx];
}
void build()
{
int i,j;
for(i=0;i<27;++i) if(t[0].ch[i]) q.push(t[0].ch[i]),add(0,t[0].ch[i]);
for(;!q.empty();)
{
int u=q.front();q.pop();
for(i=0;i<27;++i)
{
int qq=t[u].ch[i];
if(!qq)
{
t[u].ch[i]=t[t[u].f].ch[i];
continue;
}
t[qq].f=t[t[u].f].ch[i];
add(t[qq].f,qq);
q.push(qq);
}
}
}
// 继承自己.
void dfs(int x)
{
for(int i=hd[x];i;i=nex[i])
{
int v=to[i];
t[v].sta|=t[x].sta;
dfs(v);
}
}
void print(int c)
{
if(C[c]==-1) return;
print(fa[c]);
printf("%c",C[c]+'A');
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=14;++i) Log[i]=(1<<(i-1));
for(i=1;i<=n;++i) scanf("%s",str+1),insert(i);
build(),dfs(0),C[0]=-1;
for(Q.push(Sta(0,0,kk)),mark[0][0]=1;!Q.empty();)
{
Sta e=Q.front(); Q.pop();
if(e.sta==Log[n+1]-1)
{
print(e.id);
return 0;
}
int v;
int u=e.u;
int idx=e.id;
int sta=e.sta;
for(i=0;i<27;++i)
{
v=t[u].ch[i];
if(!v) continue;
if(mark[v][sta|t[v].sta])
{
continue;
}
++kk;
fa[kk]=idx;
C[kk]=i;
mark[v][sta|t[v].sta]=1;
Q.push(Sta(v,(sta|t[v].sta),kk));
}
}
return 0;
}
BZOJ 1195: [HNOI2006]最短母串 AC自动机+状压+搜索的更多相关文章
- [HNOI2006]最短母串 (AC自动机+状压)
Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12) ...
- bzoj1195 [HNOI2006]最短母串 AC 自动机+状压+bfs
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1195 题解 建立 AC 自动机,然后构建出 trie 图. 然后直接在 trie 图上走.但是 ...
- BZOJ 1195 [HNOI2006]最短母串 (Trie图+状压+bfs最短路)
BZOJ1195 LOJ10061 题目大意:给你$n$个模式串,求一个最短且字典序最小的文本串并输出这个串,$n<=12,len<=50$ 首先对所有模式串构造$Trie$图,$Trie ...
- bzoj 1195: [HNOI2006]最短母串 爆搜
1195: [HNOI2006]最短母串 Time Limit: 10 Sec Memory Limit: 32 MBSubmit: 894 Solved: 288[Submit][Status] ...
- BZOJ 1195: [HNOI2006]最短母串
1195: [HNOI2006]最短母串 Time Limit: 10 Sec Memory Limit: 32 MBSubmit: 1346 Solved: 450[Submit][Status ...
- bzoj 1195 [HNOI2006]最短母串 bfs 状压 最短路 AC自动机
LINK:最短母串 求母串的问题.不适合SAM. 可以先简化问题 考虑给出的n个字符串不存在包含关系. 那么 那么存在的情况 只可能有 两个字符串拼接起来能表示另外一个字符串 或者某个字符串的后缀可以 ...
- BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩
题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字符串的 ...
- 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路
原文地址:http://www.cnblogs.com/GXZlegend/p/6825226.html 题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串 ...
- BZOJ1195 [HNOI2006]最短母串 AC自动机 bfs
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1195 题意概括 给出一堆串,然后求一个包含这些串的所有串的最短的中的字典序最小的. 题解 先造一个AC ...
随机推荐
- Thinking In Java 4th Chap5 初始化和清理
类的构造器名必须与类名一致,且无返回类型,通过参数类型的不同(即使顺序不同也行)可以重载构造器,也可以以此技巧重载方法 this关键字:表示对“调用方法的那个对象的引用”,也可将当前对象传递给其他方法 ...
- window下 php7+apache2搭建
一.下载php7和apache2.4 首先下载php7的windows压缩包,到这里下载http://windows.php.net/download/ Php7 VC14 x86 Thread S ...
- 欢迎使用f MWeb
MWeb 是专业的 Markdown 写作.记笔记.静态博客生成软件,目前已支持 Mac,iPad 和 iPhone.MWeb 有以下特色: 软件本身: 使用原生的 macOS 技术打造,追求与系统的 ...
- dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目
参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...
- [NOIP2018模拟10.15]比赛报告
闲扯 昨晚又颓到好晚,Yali的降智光环感觉持续至今... 题面好评 T1T3都玩过 逃) T1没看多久就开始写二分+并查集 然后T3看着眼熟想了一个多小时...结果啥都没想出来 赶紧看T2发现还是没 ...
- 10 TCP限流技术
TCP限流是因为让接收方充分接受完消息,保证数据安全,不会丢失 一.窗口机制介绍 发送端和接收端都拥有一个窗口,当发送端发送数据时,落进窗口的数据被发送,当接受端接受数据时,落进接收端窗口的数据将会被 ...
- 三种定位+堆叠+li小黑点变图片
定位: 定位分为三种: position:static(默认值) relation(相对定位):进行较小偏移,不会脱离文档流,原位置保留 absolute(绝对定位):脱离文档流,不占据页面空间,变成 ...
- PHPExcel的简单使用
一.在做PHP开发时,我们会遇到把数据导出变为execl表格的形式,使用PHPExcel就可以,下载地址:https://github.com/PHPOffice/PHPExcel,下载后会显示这么多 ...
- 【坑】maven编码配置
错误环境: maven 3.5.0 idea 2017.1.1 错误原因: 由于没有设置统一编码,导致与其他同事开发过程中出现乱码问题 解决方案: 在maven的 pom配置中properties节点 ...
- (初级篇)docker基础应用--01
命令 获取镜像: docker pull //: ,如:docker pull nginx 查看镜像列表: docker images 查看镜像信息: docker inspect