热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BZOJ1195:[HNOI2006]最短母串AC自动机+状压+搜索

思路比较直接.由于$n$很小,直接定义$f[i][j]$表示当前在自动机中的节点$i,$被覆盖串的集合为$j$的方案数.#include#d

思路比较直接. 

由于 $n$ 很小,直接定义 $f[i][j]$ 表示当前在自动机中的节点 $i,$ 被覆盖串的集合为 $j$ 的方案数.   

#include
#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];
queueq;
struct Sta
{ int u,sta,id; Sta(int u=0,int sta=0,int id=0):u(u),sta(sta),id(id){}
};
queueQ;
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&#61;0,i,j,len&#61;strlen(str&#43;1); for(i&#61;1;i<&#61;len;&#43;&#43;i) {int c&#61;str[i]-&#39;A&#39;; if(!t[p].ch[c]) t[p].ch[c]&#61;&#43;&#43;tot; p&#61;t[p].ch[c]; } t[p].tag&#61;1; t[p].sta|&#61;Log[xx];
}
void build()
{ int i,j; for(i&#61;0;i<27;&#43;&#43;i) if(t[0].ch[i]) q.push(t[0].ch[i]),add(0,t[0].ch[i]); for(;!q.empty();) {int u&#61;q.front();q.pop(); for(i&#61;0;i<27;&#43;&#43;i) {int qq&#61;t[u].ch[i]; if(!qq) {t[u].ch[i]&#61;t[t[u].f].ch[i]; continue; } t[qq].f&#61;t[t[u].f].ch[i]; add(t[qq].f,qq); q.push(qq); }}
}
// 继承自己.
void dfs(int x)
{for(int i&#61;hd[x];i;i&#61;nex[i]) {int v&#61;to[i]; t[v].sta|&#61;t[x].sta; dfs(v); }
}
void print(int c)
{ if(C[c]&#61;&#61;-1) return; print(fa[c]); printf("%c",C[c]&#43;&#39;A&#39;);
}
int main()
{ int i,j; scanf("%d",&n); for(i&#61;1;i<&#61;14;&#43;&#43;i) Log[i]&#61;(1<<(i-1)); for(i&#61;1;i<&#61;n;&#43;&#43;i) scanf("%s",str&#43;1),insert(i); build(),dfs(0),C[0]&#61;-1; for(Q.push(Sta(0,0,kk)),mark[0][0]&#61;1;!Q.empty();) {Sta e&#61;Q.front(); Q.pop(); if(e.sta&#61;&#61;Log[n&#43;1]-1) { print(e.id); return 0; } int v; int u&#61;e.u; int idx&#61;e.id; int sta&#61;e.sta; for(i&#61;0;i<27;&#43;&#43;i) { v&#61;t[u].ch[i]; if(!v) continue; if(mark[v][sta|t[v].sta]) {continue; }&#43;&#43;kk; fa[kk]&#61;idx; C[kk]&#61;i; mark[v][sta|t[v].sta]&#61;1; Q.push(Sta(v,(sta|t[v].sta),kk)); }}return 0;
}

  

转:https://www.cnblogs.com/guangheli/p/11551821.html



推荐阅读
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
author-avatar
cfncjl_130
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有