【BZOJ 3926/ZJOI 2015】 诸神眷顾的幻想乡 【广义SA/广义SAM】

没想到陈立杰居然玩旧作…

题意:

\;\;\;\;啊?~幻想乡?~一个树状太阳花田上每个点都有人穿着 c c种颜色之一的衣服,求让一条树链上的人从一端开始跳起能够带给2600岁生日的幽香多少种不同的惊喜
\;\;\;\;其实就是求这棵树上有多少种不同的字符串…

1. 1.

\;\;\;\;如何对敌?题目告诉我们叶子节点不超过20个, 那么我们以每一个叶子节点为根建一棵 trie trie,将这些 trie trie合并成一棵 Hugetrie Huge\;trie,那么原树所有子串都能在 trie trie上某节点到其某后代的路径中找到,接下来就可以一套操作行云流水了。
\;\;\;\;所有广义后缀匹配结构应该都可做,这里选用了广义 SAM SAM后缀自动机,统计每一个点与其 parentmax parent\;max值之差即可。

P.S. P.S.

\;\;\;\;千万不要抄hzwer的代码,他代码里在加入新 trie trie时会把旧边覆盖掉,这样建出来的 SAM SAM是用不了的,不过只是过这题的话貌似没什么错…,总之不建议学就是了
\;\;\;\; 顺便 orzGEOTCBRL orzGEOTCBRL。

#include<cstring>
#define in_ inline
#define re_ return
#define inc(l, i, r) for(i=l; i<r; ++i)
struct io
{in_ io& operator& (int& a){static int c;for(a=0; (c=getchar())<48||57<c;);for(;c>47&&58>c; c=getchar())a=10*a+c-48;re_ *this;}
} io;const int mxn=100233, mxc=20;
int n, m, c, col[mxn], h[mxn], tmp[mxn];struct sam
{int m, f[mxn*40], v[mxn*40][mxc], l[mxn*40];in_ int ins(int p, int c){#define copy\l[nq=++m]=p[l]+1,\nq[f]=q[f], q[f]=nq;\memcpy(nq[v], q[v], sizeof(q[v]));\for(;p&&p[v][c]==q; p=p[f]) p[v][c]=nqstatic int np, q, nq;if(q=p[v][c])if(q[l]==p[l]+1) re_ q;else {copy; re_ nq;}l[np=++m]=p[l]+1;for(;p&&!p[v][c]; p=p[f]) p[v][c]=np;if(p)if(l[q=p[v][c]]==p[l]+1) np[f]=q;else {copy; np[f]=nq;}else f[np]=1;re_ np;#undef copy}in_ long long solve(){long long ans=0;for(int i=1; i<=m; ++i)ans+=i[l]-i[f][l];re_ ans;}
} sam;struct edge{int v, o;} e[mxn<<1];int dfs(int u, int w, int p)
{p=sam.ins(p, col[u]);for(int i=h[u]; i; i=e[i].o)e[i].v^w?dfs(e[i].v, u, p):0;
}#define add(u, v)\e[++m]=(edge){v, h[u]}, h[u]=m, ++tmp[u]int main()
{int i, u, v;io&n&c;inc(1, i, n+1) io&col[i];inc(1, i, n)io&u&v, add(u, v), add(v, u);sam.m=1;inc(1, i, n+1)if(tmp[i]==1)dfs(i, 0, 1);printf("%I64d\n", sam.solve());re_ 0;
}

【BZOJ 3926】【ZJOI 2015】 诸神眷顾的幻想乡相关推荐

  1. bzoj 3926 [Zjoi2015]诸神眷顾的幻想乡

    3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 1381   Solved: 811 [ Subm ...

  2. bzoj 3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)

    3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 1009   Solved: 596 [ Subm ...

  3. bzoj3926【ZJOI2015】诸神眷顾的幻想乡

    3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 790  Solved: 485 [Submit][ ...

  4. [Zjoi2015]诸神眷顾的幻想乡

    [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1537  Solved: 892 Description 幽香 ...

  5. 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机

    [BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...

  6. [ZJOI2015] 诸神眷顾的幻想乡

    P3256[ZJOI2015 Day1]诸神眷顾的幻想乡 时间限制 : 20000 MS   空间限制 : 524288 KB 问题描述 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生 ...

  7. [BZOJ]3926 诸神眷顾的幻想乡(ZJOI2015)

    听说大佬们都会后缀自动机. 小C看完SAM,想找个裸题练习一下模板.听说这题还是陈老师出的?(羊毛出在羊身上) Description  幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生 ...

  8. 【刷题】BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡

    Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...

  9. BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡

    这道题首先要读明白题,就是说叶子节点不超过20个,那么我们就可以以每一个叶子节点为根建一个广义后缀自动机,这样就一定能表示出来所有的子串,然后统计一下答案就可以啦. (广义后缀自动机就是把好多串放到一 ...

最新文章

  1. 021Python路--单例设计模式
  2. 9076什么意思_9076西南大学人力资源开发与管理答案
  3. Xcode10 闪退问题
  4. Django 函数和方法的区别
  5. c语言消字母游戏实验报告,C语言编程实验报告格式示例
  6. Git命令,合并分支到master,并提交远程仓库,将本地分支推送到远程仓库
  7. 【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。
  8. Timer组件的使用
  9. 免费资源:Polaris UI套件 + Linecons图标集(AI, PDF, PNG, PSD, SVG)
  10. 丹纳赫:全球实业型赋能投资标杆
  11. php区分字符串数字,php如何判断字符串是不是数字
  12. Visual Studio2010安装步骤
  13. flash spi 野火_野火stm32-SPI
  14. python_lintcode_52翻转字符串_128哈希函数
  15. 大数据的价值体现在哪几个方面,大数据领域未来的技术方向是什么?
  16. Kali linux安装Nvidia官方显卡驱动的心灵路程
  17. 机器人编程教育培养孩子综合能力
  18. ios Objective-c 字体样式大全(UIFont 可设置的)
  19. 掌上游戏机开发指南——GBA程序开发入门
  20. Android手机令牌教程

热门文章

  1. 读书有益——》我不过无比正确的生活
  2. 基于SSM的健身房系统的设计与实现
  3. Linux i2c驱动框架分析 (二)
  4. 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现高斯分布参数推断
  5. 读取字体.ttf文件,生成艺术字图片代码
  6. 3d max 网络渲染
  7. EXCEL神奇的宏表函数,比如 get.cell() 可以判断颜色值
  8. oracle oaf界面个性化,个性化EBS标准OAF页面(EO,+SQL全版本).doc
  9. 无线网络技术Mesh解析及解决方案推荐
  10. Android开发5年,分享下初级 中级 高级工程师 划分标准