【AC自动机】最短母串
【题目链接】
【题意】
给定 n 个字符串 S1~Sn,要求找到一个最短的字符串 T,使得这 n 个字符串都是 T 的子串。
【题解】
类似于搜索+二进制记录状态的题目
搜索时利用BFS来跑,每一个结点的位置都可以用状态数组存起来,
判断是否为 (1<<n)- 1 即可。
在输出答案时需要递归实现,所以要一个辅助数组fa来记录上一个结点的位置。
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 6e3+;
const int M = 2e6+;
const int Str_N = ;
int Trie[N][],fail[N],End[N];
int vis[N][Str_N];
int Q[M],St[M];
int Fa[M];
char str[M];
int Head,Tail;
int n,idx;
char Str[Str_N];
void print(int x){
if(x==) return ;
print(Fa[x]);
putchar(str[x]+'A');
}
void Insert( char s[] , int Id ){
int p = ;
for(int i=;s[i];i++){
int t = s[i]-'A';
if( !Trie[p][t] )
Trie[p][t] = ++idx;
p = Trie[p][t];
}
End[p] |= (<<Id);
}
void Build(){
Head = , Tail = ; for(int i=;i<;i++){
if( Trie[][i] ){
Q[++Tail] = Trie[][i];
fail[Trie[][i]] = ;
}
} while( Head <= Tail ){
int u = Q[Head++]; for(int i=;i<;i++){
int To = Trie[u][i];
if( To ){
fail[To] = Trie[fail[u]][i];
Q[++Tail] = To ;
End[To] |= End[fail[To]];
}else{
Trie[u][i] = Trie[fail[u]][i];
}
}
}
}
void Solve(){
memset(Q,,sizeof Q ); Head = , Tail = ;
Q[] = St[] = ;
vis[][] = ; while( Head < Tail ){
int u = Q[++Head],S = St[Head];
for(int i=;i<;i++){
int To = Trie[u][i];
int Ts = S | End[To] ;
if( vis[Ts][To] ) continue; Fa[++Tail] = Head ; Q[Tail] = To ;str[Tail] = i;
vis[Ts][To] = ;St[Tail] = Ts ; if( Ts == (<<n)- ){
print(Tail);
putchar('\n');
return ;
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%s",Str);
Insert(Str,i);
}
Build();
Solve();
return ;
} /*
*
4
HNOI
NOIP
NOI
IOI HNOIPIOI
*/
【AC自动机】最短母串的更多相关文章
- BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩
题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字符串的 ...
- [HNOI2006]最短母串问题 --- AC自动机 + 隐式图搜索
[HNOI2006]最短母串问题 题目描述: 给定n个字符串(S1,S2.....,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,......,Sn)都是T的子串. 输入格式: 第 ...
- bzoj 1195 [HNOI2006]最短母串 bfs 状压 最短路 AC自动机
LINK:最短母串 求母串的问题.不适合SAM. 可以先简化问题 考虑给出的n个字符串不存在包含关系. 那么 那么存在的情况 只可能有 两个字符串拼接起来能表示另外一个字符串 或者某个字符串的后缀可以 ...
- BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图
BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图 Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2, ...
- P2322 [HNOI2006]最短母串问题
P2322 [HNOI2006]最短母串问题 AC自动机+bfs 题目要求:在AC自动机建的Trie图上找到一条最短链,包含所有带结尾标记的点 因为n<12,所以我们可以用二进制保存状态:某个带 ...
- [BZOJ1195]最短母串
1195: [HNOI2006]最短母串 Time Limit: 10 Sec Memory Limit: 32 MB Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最 ...
- 【状态压缩dp】1195: [HNOI2006]最短母串
一个清晰的思路就是状压dp:不过也有AC自动机+BFS的做法 Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T ...
- 【loj10061】最短母串
#10061. 「一本通 2.4 练习 4」最短母串 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交 提交 ...
- [bzoj1195][HNOI2006]最短母串_动态规划_状压dp
最短母串 bzoj-1195 HNOI-2006 题目大意:给一个包含n个字符串的字符集,求一个字典序最小的字符串使得字符集中所有的串都是该串的子串. 注释:$1\le n\le 12$,$1\le ...
- 【刷题】BZOJ 1195 [HNOI2006]最短母串
Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12) ...
随机推荐
- Flutter控制某个TextField获取焦点及失去焦点
在项目中有时需要点击某个地方的时候让一个文本框获取焦点以弹起键盘~~比如前端经常使用的input.focus(),但是在flutter中没有.focus()这个方法~~不过我们可以通过FocusSco ...
- BGP多线 有些BGP IP也会被极少数运营商劫持 取Ip逻辑
小结: 1.租用的服务器只有一个IP,用户的访问路线是由路由器根据访客的实际访问速度选择最优访问路径,来选择访问的.而且不占用任何的服务器资源.服务器的上行和下行都是有路由器来选择最佳的路线,所以这样 ...
- kafka和rabbitmq对比
1.吞吐量kafka吞吐量更高:1)Zero Copy机制,内核copy数据直接copy到网络设备,不必经过内核到用户再到内核的copy,减小了copy次数和上下文切换次数,大大提高了效率.2)磁盘顺 ...
- C之数组
1. 数组的地址就是数组里元素的首地址 2. 数组其实就是一块连续的内存空间 3. 每个元素所占大小取决于数组的类型 4. 所有指针变量在内存中的长度是一样的
- c语言 nmealib-0.5.3 学习 简单代码 ,供参考
void showInfo1(char *buf) { ];// ="$GPGGA,031105.000,4003.9196,N,11620.5765,E,1,05,3.4,109.0,M, ...
- oracle-游标-存储过程-函数-包
一.存储过程 不可以在insert,update,delete中直接使用,可以有return但代表的是退出过程 过程有三种类型:不返回值,可以返回多个值,参数有三种类型,分别如下: in:只输入,不返 ...
- Java并发编程系列-(7) Java线程安全
7. 线程安全 7.1 线程安全的定义 如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的. 类的线程安全表现为: 操作的原子性 内存的可见性 不 ...
- EasyUI入门配置
EasyUI是一款基于jQuery的前端插件,简化了开发,免去编写复杂的js和css即可实现不错的显示效果. 基本配置: index.html <!DOCTYPE html> <ht ...
- Nginx+Keepalived双主架构实现
Keepalived+Nginx实现高可用Web负载均衡 Master 192.168.0.69 nginx.keepalived Centos7.4backup 192.168.0.70 nginx ...
- Linux学习笔记之系统中的分区和文件系统
转自 http://blog.csdn.net/hanxuehen/article/details/8229472