热门标签 | 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



推荐阅读
  • 题面传送门Solution看到什么最大值最小肯定二分啊。check直接跑一个二分图匹配就好了。orzztl!!!代码实现*mail:mle ... [详细]
  • 796.[APIO2012]派遣在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。在这个帮派里,有一名忍者被称之为Master。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 题目描述Takuru是一名情报强者,所以他想利用他强大的情报搜集能力来当中间商赚差价。Takuru的计划是让Hinae帮他去市场上买一个商品,然后再以另一个价格卖掉它。Takur ... [详细]
  • DescriptionclickmeSolution套路的状压期望DP题。。。考虑倒退期望:设fi,jrolepresentationstyleposi ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  •   并查集是一种群众喜闻乐见的数据结构,其复杂度是数据结构中最奇葩的之一了,Tarjan证明其为阿克曼函数的反函数,在可以想象(不全面的解释啊)的范围内小于等于3。。。我们就把它当做O(1)吧。下面通 ... [详细]
  • 为什么即使Linux服务器的socket关闭,客户端仍能调用一次send函数?
    要弄清这个问题,首先需要知道调用send()发送数据时,发生了什么。当调用send()发送数据时,并不是直接将数据发送到网络中,而是先将待发送的数据放到socket发送缓冲区中,然 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • P113:集成日志组件 logback 2彩色日志
    第二步,将控制台的日志改成彩色日志,便于查看修改logback.xml文件。 ... [详细]
  • JZOJ 1266. 玉米田
    1266.玉米田(cowfood.pasccpp)(FileIO):input:cowfood.inoutput:cowfood.outTimeLimits:1000msMemor ... [详细]
  • 开发笔记:城市建设
    本文由编程笔记#小编为大家整理,主要介绍了城市建设相关的知识,希望对你有一定的参考价值。本文涉及:cdq分治、MST一道十分精妙的cdq分 ... [详细]
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社区 版权所有