思路比较直接. 由于 $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 name…
Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12),表示给定的字符串的个数. 以下的n行,每行有一个全由大写字母组成的字符串.每个字符串的长度不超过50. Output 只有一行,为找到的最短的字符串T.在保证最短的前提下, 如果有多个字符串都满足要求,那么必须输出按字典序排列的第一个. Sample Input 2 ABCD BCDABC Sample…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1195 题解 建立 AC 自动机,然后构建出 trie 图. 然后直接在 trie 图上走.但是我们需要经过每一个串. 所以我们处理一下每个点代表了哪些串,然后把状态加入进 bfs 状态. 然后 bfs 就可以了. \(O(n)\). #include<bits/stdc++.h> #define fec(i, x, y) (int i = head[x], y = g[i].to; i;…
BZOJ1195 LOJ10061 题目大意:给你$n$个模式串,求一个最短且字典序最小的文本串并输出这个串,$n<=12,len<=50$ 首先对所有模式串构造$Trie$图,$Trie$图的性质和$DP$的性质简直是完美契合.. 模式串数量很少,考虑状压 定义$f[x][s]$表示现在所在$Trie$图内的位置为$x$,已经匹配到的串的状态为$s$,此时需要文本串的最短长度 转移十分显然,$f[fail_{x}][s|ed[fail_{x}])]=min(f[x][s])+1$ 最后找出最…
1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 894  Solved: 288[Submit][Status][Discuss] Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12),表示给定的字符串的个数.以下的n行,每行有一个全由大写字母组成的字符串.每个字符串的…
1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 1346  Solved: 450[Submit][Status][Discuss] Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12),表示给定的字符串的个数.以下的n行,每行有一个全由大写字母组成的字符串.每个字符串…
LINK:最短母串 求母串的问题.不适合SAM. 可以先简化问题 考虑给出的n个字符串不存在包含关系. 那么 那么存在的情况 只可能有 两个字符串拼接起来能表示另外一个字符串 或者某个字符串的后缀可以当成别的字符串的前缀使用. 实际情况可能更加复杂. 观察上面的两种情况 容易AC自动机可以解决类似的问题. 在AC自动机上跑 就可以借用别的字符串的后缀当做自己的前缀进行使用了. 考虑建立出AC自动机 我们要求出一条路径 使得AC自动机上所有的终止节点都被经过. 当然也有特殊情况 就是 以终止节点为…
题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字符串的个数. 以下的n行,每行有一个全由大写字母组成的字符串.每个字符串的长度不超过50. 输出 只有一行,为找到的最短的字符串T.在保证最短的前提下, 如果有多个字符串都满足要求,那么必须输出按字典序排列的第一个. 样例输入 2 ABCD BCDABC 样例输出 ABCDABC   题意是找一个最短的母串包含…
原文地址:http://www.cnblogs.com/GXZlegend/p/6825226.html 题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字符串的个数.以下的n行,每行有一个全由大写字母组成的字符串.每个字符串的长度不超过50. 输出 只有一行,为找到的最短的字符串T.在保证最短的前提下,如果有多个字符串都满足要求,那么必须输出按字典序排列的第…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1195 题意概括 给出一堆串,然后求一个包含这些串的所有串的最短的中的字典序最小的. 题解 先造一个AC自动机,多模匹配嘛. 然后bfs在AC自动机上面走,两维状态,dis[i][j]表示已经走到过的串状态为i,在AC自动机上面的位置为j的最短距离. 然后这题居然要卡空间! 坑死了. 然后用了short wa掉了. 发现short实在小的可怜,然后把几个大的数组的有必要的一个开了int,然后30MB卡…