洛谷90,最后一个点死活卡不过去(也可能是我写的有问题?

比较暴力的做法,把询问带着标号建立AC自动机,用map存儿子。

然后用名字串在自动机上跑,以为是名或姓的子串就行所以把名和姓中间加个特殊字符拼起来即可。

注意trie的根最好设为1(now=1),然后把c[0][x]初始为1

#include<cstdio>
#include<map>
#include<queue>
#include<vector>
using namespace std;
const int N=100005;
int n,m,s[N],a1[N],a2[N],v[N],mk[N],ti;
vector<int>a[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
struct aczidongji
{
int fa[N],tot;
map<int,int>c[N];
vector<int>po[N];
void init()
{
tot=1;
for(int i=-1;i<=10000;i++)
c[0][i]=1;
fa[1]=0;
}
void build(int p)
{
int now=1,n=read();
for(int i=1;i<=n;i++)
{
int x=read();
if(!c[now][x])
c[now][x]=++tot;
now=c[now][x];
}
po[now].push_back(p);
}
void par()
{
queue<int>q;
q.push(1);
while(!q.empty())
{
int u=q.front();
q.pop();
for(map<int,int>::iterator i=c[u].begin();i!=c[u].end();i++)
{
int t=i->first,k=fa[u];
while(!c[k][t])
k=fa[k];
fa[i->second]=c[k][t];
q.push(i->second);
}
}
}
void clc(int id,int x)
{
for(int i=x;i;i=fa[i])
if(v[i]!=ti)
{
v[i]=ti;
int len=po[i].size();
for(int j=0;j<len;j++)
if(mk[po[i][j]]!=ti)
{
mk[po[i][j]]=ti;
a1[po[i][j]]++;
a2[id]++;
}
}
else
break;
}
void wk(int x)
{
ti++;
int now=1,len=a[x].size();
for(int i=0;i<len;i++)
{
for(int t=a[x][i];!c[now][t];now=fa[now]);
now=c[now][a[x][i]];
clc(x,now);
}
}
}ac;
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
int z=read();
while(z--)
{
int x=read();
a[i].push_back(x);
}
a[i].push_back(-1);
z=read();
while(z--)
{
int x=read();
a[i].push_back(x);
}
}
ac.init();
for(int i=1;i<=m;i++)
ac.build(i);//cerr<<"build"<<endl;
ac.par();//cerr<<"par"<<endl;
for(int i=1;i<=n;i++)
ac.wk(i);//cerr<<"wk"<<endl;
for(int i=1;i<=m;i++)
printf("%d\n",a1[i]);
for(int i=1;i<=n;i++)
printf("%d ",a2[i]);
return 0;
}

bzoj 2754: [SCOI2012]喵星球上的点名【AC自动机】的更多相关文章

  1. BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1902  Solved: 837[Submit][St ...

  2. BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机、树状数组)

    吐槽: 为啥很多人用AC自动机暴力跳都过了?复杂度真的对么? 做法一: AC自动机+树状数组 姓名的问题,中间加个特殊字符连起来即可. 肯定是对点名串建AC自动机(map存儿子),然后第一问就相当于问 ...

  3. BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机+map维护Trie树)

    题目大意:略 由于字符集大,要用map维护Trie树 并不能用AC自动机的Trie图优化,不然内存会炸 所以我用AC自动机暴跳fail水过的 显然根据喵星人建AC自动机是不行的,所以要根据问题建 然而 ...

  4. BZOJ 2754: [SCOI2012]喵星球上的点名

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 649  Solved: 305[Submit][Sta ...

  5. BZOJ 2754: [SCOI2012]喵星球上的点名 [后缀数组+暴力]

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1906  Solved: 839[Submit][St ...

  6. 【刷题】BZOJ 2754 [SCOI2012]喵星球上的点名

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串来点 ...

  7. BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机)

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2816  Solved: 1246[Submit][Status][Discuss] Descript ...

  8. BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机/后缀自动机)

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...

  9. bzoj 2754 [SCOI2012]喵星球上的点名(后缀数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2754 [题意] 每只喵有名姓,如果被老师点到名或姓的子串都要答道,但每只喵一次点名只答 ...

随机推荐

  1. sublime text 3注册码

    —– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 AFF6F6 ...

  2. Java时间戳转化为今天、昨天、明天(字符串格式)

    原文:http://www.open-open.com/code/view/1435301895825 时间戳,相信大家一定都不陌生,服务器经常会传回来时间戳,需要我们对时间戳进行处理.各种麻烦不断, ...

  3. IOCP数据中间件

    IOCP数据中间件 每包最大8K(8192字节),超过8187字节的数据要分包传输 首包有5个字节的包头:4字节数据长度(告诉对方,此次总共将传输几字节数据) + 1字节命令字(告诉对方,此次请求的何 ...

  4. html5摇一摇代码优化

    首先对DeviceMotionEvent进行优化: 去除没用的代码,又一次封装DeviceMotionEven if(window.DeviceMotionEvent) { var speed = 2 ...

  5. Linux 的 Socket IO 模型

    前言 之前有看到用很幽默的方式讲解Windows的socket IO模型,借用这个故事,讲解下linux的socket IO模型: 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系. 他 ...

  6. Visual Studio VS如何拷贝一个项目的窗体文件到另一个项目

    1 比如下我有一个项目,我要把这个Config整个窗体和代码拷贝到另一个项目   2 在新项目中添加现有项,然后把这个窗体相关的三个文件都添加到新的项目中   3 然后在新窗体中就什么都有了     ...

  7. MIT 操作系统实验 MIT JOS lab1

    JOS lab1 首先向MIT还有K&R致敬! 没有非常好的开源环境我不可能拿到这么好的东西. 向每个与我一起交流讨论的programmer致谢!没有道友一起死磕.我也可能会中途放弃. 跟丫死 ...

  8. MySQL基础笔记(三) 复杂查询

    所谓复杂查询,指涉及多个表.具有嵌套等复杂结构的查询.这里简要介绍典型的几种复杂查询格式. 一.连接查询 连接是区别关系与非关系系统的最重要的标志.通过连接运算符可以实现多个表查询.连接查询主要包括内 ...

  9. 使用vscode 编译 sass

    由于我在工作中用的编辑器是 vscode ,所以记录一下vscode 编译sass 的配置 vs code 编译saass 1.在扩展里搜索“easy sass”,直接进行安装即可 2.安装后默认已经 ...

  10. FFT做题记录

    FFT是用来快速求卷积的..... 那么卷积有什么作用呢 https://www.zhihu.com/question/22298352 看完就懂了