思路比较直接.

由于 $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自动机+状压+搜索的更多相关文章

  1. [HNOI2006]最短母串 (AC自动机+状压)

    Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12) ...

  2. bzoj1195 [HNOI2006]最短母串 AC 自动机+状压+bfs

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1195 题解 建立 AC 自动机,然后构建出 trie 图. 然后直接在 trie 图上走.但是 ...

  3. BZOJ 1195 [HNOI2006]最短母串 (Trie图+状压+bfs最短路)

    BZOJ1195 LOJ10061 题目大意:给你$n$个模式串,求一个最短且字典序最小的文本串并输出这个串,$n<=12,len<=50$ 首先对所有模式串构造$Trie$图,$Trie ...

  4. bzoj 1195: [HNOI2006]最短母串 爆搜

    1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 894  Solved: 288[Submit][Status] ...

  5. BZOJ 1195: [HNOI2006]最短母串

    1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 1346  Solved: 450[Submit][Status ...

  6. bzoj 1195 [HNOI2006]最短母串 bfs 状压 最短路 AC自动机

    LINK:最短母串 求母串的问题.不适合SAM. 可以先简化问题 考虑给出的n个字符串不存在包含关系. 那么 那么存在的情况 只可能有 两个字符串拼接起来能表示另外一个字符串 或者某个字符串的后缀可以 ...

  7. BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩

    题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字符串的 ...

  8. 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825226.html 题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串 ...

  9. BZOJ1195 [HNOI2006]最短母串 AC自动机 bfs

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1195 题意概括 给出一堆串,然后求一个包含这些串的所有串的最短的中的字典序最小的. 题解 先造一个AC ...

随机推荐

  1. (七)mybatis 的输入映射与输出映射

    目录 前言 输入映射 - - 传递 pojo 包装类型 (复杂查询 ) 输出映射 - - resultType 输出映射 - - resultMap 前言 通过 paramterType 指定输入参数 ...

  2. DP单调队列--斜率优化P3195

    题意:https://www.luogu.com.cn/problem/P3195 思路:https://www.luogu.com.cn/problemnew/solution/P3195 #def ...

  3. java统计字符串中每个字符出现的次数

    package MapTest; import java.util.HashMap; public class MapTest { public static void Count(String st ...

  4. 使用haystack实现django全文检索搜索引擎功能

    前言 django是python语言的一个web框架,功能强大.配合一些插件可为web网站很方便地添加搜索功能. 搜索引擎使用whoosh,是一个纯python实现的全文搜索引擎,小巧简单. 中文搜索 ...

  5. Kafka实际使用过程中遇到的一些问题及解决方法

    Kafka实际使用过程中遇到的一些问题及解决方法: 1.关于Kafka的分区: 开始使用Kafka的时候,没有分区的概念,以为类似于传统的MQ中间件一样,就直接从程序中获取Kafka中的数据. 后来程 ...

  6. 怎样理解第三方Cookie

    1. Cookie往往是用来存储用户信息的, 但有些恶意站点设法伪造了带有正确Cookie的HTTP请求, 这时就会产生安全问题( CSRF 攻击 ). 这里恶意网站获取cookie的行为就是第三方c ...

  7. Java组合模式(思维导图)

    图1 组合模式[点击查看图片] 1,以公司职员为例的结构 package com.cnblogs.mufasa.demo3; import java.util.ArrayList; import ja ...

  8. http 协议相关问题

    http 协议相关问题 来源 https://www.cnblogs.com/lingyejun/p/7148756.html 1.说一下什么是Http协议? 对器客户端和 服务器端之间数据传输的格式 ...

  9. MAVEN打包时没有将src/main/cache文件夹打到到WAR包中

    某项目中ehcache配置文件写在src/main/cache中,结果用maven打包时,得到的WAR包里面没有这个文件夹 因为maven打包时默认只打包src/main/java中的文件和src/m ...

  10. 调查问卷WebApp

    1. 效果演示 2. 主要知识点 使用slot分发内容 动态组件 组件通信 实例的生命周期 表单 3. 遇到的问题 bus 通信 第一次 $on 监听不到 // 解决bus 第一次通信 $on 监听不 ...