【BZOJ3926】【Zjoi2015】诸神眷顾的幻想乡 广义后缀自动机
链接:
#include <stdio.h>
int main()
{puts("转载请注明出处[vmurder]谢谢");puts("网址:blog.csdn.net/vmurder/article/details/44891009");
}
题意、题解、数据、出题人标程
http://wjmzbmr.com/archives/zjoi-2015-day-1%e9%a2%98%e8%a7%a3/26
本蒟蒻的题解:
首先我们发现叶子节点很少,所以可以从每个叶子节点开始扫,然后就建立起了一棵大大的Trie树!然后统计有多少子串,就需要把Trie建立成广义(多串)后缀自动机。
然后怎么统计呢?
ans=∑i,i∈samdepi−deppaians=∑_{i,i\in sam} dep_i-dep_{pa_i}
为什么呢?
考虑abc建立起来的串,答案是6……嗯什么也发现不了。
然后abcb,我们发现第一个b字符和第二个b字符,它们的pa都是那个辅助节点。
发现是每个节点,从1开始到它的dep,都能构成长短不一的子串,但是其中或许会有重复,而对于这两个’b’,重复的部分都是pa的1~dep一部分,然后都减去了。
最终得到正确答案9。
代码:
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 101000
#define T 10
using namespace std;struct Eli
{int v,next;
}e[N<<1];
int head[N],cnt,d[N];
inline void add(int u,int v)
{d[v]++;e[++cnt].v=v;e[cnt].next=head[u];head[u]=cnt;
}
int n,m,src[N];
struct SAM
{int son[N*20][T],pa[N*20],dep[N*20]; // 那个吧。这里开少了一倍TAT,竟然AC了int root,cnt,crs[N*20]; // 其实也不算奇怪,均摊下来差不多啦~(不是太好构造~)void begin(){crs[0]=root=cnt=1;}int newnode(int last){dep[++cnt]=dep[last]+1;return cnt;}int add(int p,int x){int np=son[p][x];if(np&&dep[np]==dep[p]+1)return np;else np=newnode(p); /* 这是与单串后缀自动机唯一有区别的部分*/while(p&&!son[p][x])son[p][x]=np,p=pa[p];if(!p)pa[np]=root;else {int q=son[p][x];if(dep[q]==dep[p]+1)pa[np]=q;else {int nq=newnode(p);pa[nq]=pa[q],pa[q]=pa[np]=nq;memcpy(son[nq],son[q],sizeof son[q]);while(p&&son[p][x]==q)son[p][x]=nq,p=pa[p];}}return np;}void dfs(int x,int p){crs[x]=add(crs[p],src[x]);int i,v;for(i=head[x];i;i=e[i].next){v=e[i].v;if(v==p)continue;dfs(v,x);}}bool vis[N*20];queue<int>q;long long bfs(){long long ret=0;q.push(root);int i,u,v;while(!q.empty()){u=q.front(),q.pop();if(u!=root)ret+=dep[u]-dep[pa[u]];for(i=0;i<m;i++){v=son[u][i];if(vis[v])continue;vis[v]=true,q.push(v);}}return ret;}
}sam;
int main()
{freopen("test.in","r",stdin);int i,a,b;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",&src[i]);for(i=1;i<n;i++){scanf("%d%d",&a,&b);add(a,b),add(b,a);}sam.begin();for(i=1;i<=n;i++)if(d[i]==1){sam.dfs(i,0);break;}cout<<sam.bfs()<<endl;return 0;
}
【BZOJ3926】【Zjoi2015】诸神眷顾的幻想乡 广义后缀自动机相关推荐
- 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
[BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...
- [bzoj3926][Zjoi2015]诸神眷顾的幻想乡
来自FallDream的博客,未经允许, 请勿转载,谢谢. 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情 ...
- Luogu P3346 [ZJOI2015]诸神眷顾的幻想乡 广义SAM 后缀自动机
题目链接 \(Click\) \(Here\) 真的是好题啊-不过在说做法之前先强调几个自己总是掉的坑点. 更新节点永远记不住往上跳\(p = fa[p]\) 新建节点永远记不住\(len[y] = ...
- [Zjoi2015]诸神眷顾的幻想乡
[Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1537 Solved: 892 Description 幽香 ...
- bzoj 3926 [Zjoi2015]诸神眷顾的幻想乡
3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1381 Solved: 811 [ Subm ...
- bzoj 3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1009 Solved: 596 [ Subm ...
- [ZJOI2015] 诸神眷顾的幻想乡
P3256[ZJOI2015 Day1]诸神眷顾的幻想乡 时间限制 : 20000 MS 空间限制 : 524288 KB 问题描述 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生 ...
- 【刷题】BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- [洛谷P3346][ZJOI2015]诸神眷顾的幻想乡
题目大意:给你一棵$n$个点的树,最多有$20$个叶子节点,问共有几个不同的子串 题解:广义$SAM$,对每个叶子节点深搜一次,每个节点的$lst$设为这个节点当时的父亲,这样就可以时建出来的$SAM ...
最新文章
- 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时
- startActivities的使用
- 起步难、评职称难、压力大!青年科研人员“心病”问题亟待关注!
- linux 脚本 if判断 o,shell脚本常用脚本:if判断
- Magento教程 20:仅限会员留言的产品评论设定!
- Java—线程的生命周期及线程控制方法详解
- 谷歌浏览器实现直接打印效果
- Java_String
- 重启nginx后丢失nginx.pid的解决方法
- AI辅助构建知识图谱:关系抽取
- 编写可靠Linux shell脚本的建议
- 软件基本功:代码创新要不得:for循环判断一个字符是不是数字字符
- 中国十大名牌直流稳压电源
- 越有钱越抠门 李嘉诚西装一穿就是十年
- 服务器硬件配置及RAID配置操作
- 日期格式化跨年bug,是否与你不期而遇?
- 为什么游戏模型不如原画好看?
- php ecb加密,PHP之DES加密解密算法类(ECB模式)(实例教程)
- NXP-MPC5748G车载MCU使用(食用)方法(踩坑)实用指南(骗人教程)(三):MATLAB/SIMULINK生成代码给MPC5848G嵌入式处理器运行
- Linux下gunicorn用法
热门文章
- java机甲类回合制游戏,2018经典机甲游戏有哪些_好玩的机甲类游戏推荐
- 用html做一个可以拨打电话的链接
- python [::-1] [::-1,::-1]
- el-table怎么设置单个表格变颜色
- 【报错】1366-Incorrect string value:\xE6\x9D\x8E\xE5\xAD\xA6...for column name at row 1
- 学海无涯!回头是岸!
- 实验吧_拐弯抹角(url伪静态)Forms
- [CF444E]DZY Loves Planting
- qq 飞信中无法切换输入法
- CTF pwn/re手在学习过程中的零碎操作积累