【BZOJ 3926】【ZJOI 2015】 诸神眷顾的幻想乡
【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】 诸神眷顾的幻想乡相关推荐
- 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 ...
- bzoj3926【ZJOI2015】诸神眷顾的幻想乡
3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 790 Solved: 485 [Submit][ ...
- [Zjoi2015]诸神眷顾的幻想乡
[Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1537 Solved: 892 Description 幽香 ...
- 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
[BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...
- [ZJOI2015] 诸神眷顾的幻想乡
P3256[ZJOI2015 Day1]诸神眷顾的幻想乡 时间限制 : 20000 MS 空间限制 : 524288 KB 问题描述 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生 ...
- [BZOJ]3926 诸神眷顾的幻想乡(ZJOI2015)
听说大佬们都会后缀自动机. 小C看完SAM,想找个裸题练习一下模板.听说这题还是陈老师出的?(羊毛出在羊身上) Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生 ...
- 【刷题】BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡
这道题首先要读明白题,就是说叶子节点不超过20个,那么我们就可以以每一个叶子节点为根建一个广义后缀自动机,这样就一定能表示出来所有的子串,然后统计一下答案就可以啦. (广义后缀自动机就是把好多串放到一 ...
最新文章
- 021Python路--单例设计模式
- 9076什么意思_9076西南大学人力资源开发与管理答案
- Xcode10 闪退问题
- Django 函数和方法的区别
- c语言消字母游戏实验报告,C语言编程实验报告格式示例
- Git命令,合并分支到master,并提交远程仓库,将本地分支推送到远程仓库
- 【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。
- Timer组件的使用
- 免费资源:Polaris UI套件 + Linecons图标集(AI, PDF, PNG, PSD, SVG)
- 丹纳赫:全球实业型赋能投资标杆
- php区分字符串数字,php如何判断字符串是不是数字
- Visual Studio2010安装步骤
- flash spi 野火_野火stm32-SPI
- python_lintcode_52翻转字符串_128哈希函数
- 大数据的价值体现在哪几个方面,大数据领域未来的技术方向是什么?
- Kali linux安装Nvidia官方显卡驱动的心灵路程
- 机器人编程教育培养孩子综合能力
- ios Objective-c 字体样式大全(UIFont 可设置的)
- 掌上游戏机开发指南——GBA程序开发入门
- Android手机令牌教程
热门文章
- 读书有益——》我不过无比正确的生活
- 基于SSM的健身房系统的设计与实现
- Linux i2c驱动框架分析 (二)
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现高斯分布参数推断
- 读取字体.ttf文件,生成艺术字图片代码
- 3d max 网络渲染
- EXCEL神奇的宏表函数,比如 get.cell() 可以判断颜色值
- oracle oaf界面个性化,个性化EBS标准OAF页面(EO,+SQL全版本).doc
- 无线网络技术Mesh解析及解决方案推荐
- Android开发5年,分享下初级 中级 高级工程师 划分标准