[洛谷P3346][ZJOI2015]诸神眷顾的幻想乡
题目大意:给你一棵$n$个点的树,最多有$20$个叶子节点,问共有几个不同的子串
题解:广义$SAM$,对每个叶子节点深搜一次,每个节点的$lst$设为这个节点当时的父亲,这样就可以时建出来的$SAM$含有所有的字串
卡点:无
C++ Code:
#include <cstdio>
#include <iostream>#define maxn 100010
int head[maxn], cnt;
struct Edge {int to, nxt;
} e[maxn << 1];
int ind[maxn];
inline void addedge(int a, int b) {e[++cnt] = (Edge) {b, head[a]}; head[a] = cnt;e[++cnt] = (Edge) {a, head[b]}; head[b] = cnt;
}int w[maxn];namespace SAM {
#define N (maxn * 22 << 1)int lst = 1, idx = 1;int R[N], fail[N], nxt[N][10];void append(int ch) {int p = lst, np = lst = ++idx; R[np] = R[p] + 1;for (; p && !nxt[p][ch]; p = fail[p]) nxt[p][ch] = np;if (!p) fail[np] = 1;else {int q = nxt[p][ch];if (R[p] + 1 == R[q]) fail[np] = q;else {int nq = ++idx;R[nq] = R[p] + 1, fail[nq] = fail[q], fail[q] = fail[np] = nq;std::copy(nxt[q], nxt[q] + 10, nxt[nq]);for (; nxt[p][ch] == q; p = fail[p]) nxt[p][ch] = nq;}}}void dfs(int u, int fa = 0) {append(w[u]);int tmp = lst;for (int i = head[u]; i; i = e[i].nxt) {int v = e[i].to;if (v != fa) dfs(v, u), lst = tmp;}}long long query() {long long ans = 0;for (int i = 2; i <= idx; i++) ans += R[i] - R[fail[i]];return ans;}
#undef N
}int n, m;
int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) scanf("%d", w + i);for (int i = 1, a, b; i < n; i++) {scanf("%d%d", &a, &b);addedge(a, b); ind[a]++, ind[b]++;}for (int i = 1; i <= n; i++) if (ind[i] == 1) {SAM::lst = 1;SAM::dfs(i);}printf("%lld\n", SAM::query());return 0;
}
转载于:https://www.cnblogs.com/Memory-of-winter/p/10162064.html
[洛谷P3346][ZJOI2015]诸神眷顾的幻想乡相关推荐
- 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 幽香 ...
- 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
[BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...
- 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岁生 ...
- [bzoj3926][Zjoi2015]诸神眷顾的幻想乡
来自FallDream的博客,未经允许, 请勿转载,谢谢. 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情 ...
- 【刷题】BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡
这道题首先要读明白题,就是说叶子节点不超过20个,那么我们就可以以每一个叶子节点为根建一个广义后缀自动机,这样就一定能表示出来所有的子串,然后统计一下答案就可以啦. (广义后缀自动机就是把好多串放到一 ...
最新文章
- linux中的vsprintf_Git29 年超 100 万次 commit,Linux 内核何以发展至今?
- 股票软件开发中全推与点播的区别(自己留作记录的,请csdn的小编别乱删我的文章)...
- MS SQL SERVER2005更新触发器
- Sklearn环境搭建与常用包
- sql中update多表处理
- 国电集团:电子招投标每年节约成本10亿元
- Juce-强大的开源类库
- Docker入门到实践 (一) docker简介与安装、常用命令讲解
- 人脸识别最低像素_深入浅出人脸识别技术
- 日本房产泡沫的崩塌,虽然很长,希望80后仔细阅读
- WSTMart商城系统数据字典
- 尚融宝——阿里云短信验证功能(sms)
- IT运维和自动化运维以及运维开发有啥不同?能解释下吗?
- Oracle to_date()函数的用法
- (2) Hive安装
- 10种常见的移动端App广告展现形式
- Android AccountManager帐号管理(一)
- SpringBoot整合SpringEmail 批量发送邮件
- 软件测试——基础练习(期末复习)
- 数据恢复软件设计与实现(二)