【bzoj3926】【Zjoi2015】诸神眷顾的幻想乡
题解:
- 如果树上某个路径串的端点不是叶子,那么一定是另一个串的子串;
- 这样只对叶子$dfs$把$20*20$个串插入广义$SAM$就是统计本质不同的串的个数的模板了;
- 我不太会分析广义$SAM$的空间,但是我知道似乎完全图是有$n-1$条欧拉回路的,所以长度不会超过$2n*(20-1)$,需要卡一卡;
- 可能后面会补广义的坑吧。。。。
#include<bits/stdc++.h>
#define rg register
#define il inline
#define ll long long
using namespace std;
const int N=,M=;
int n,m,sz,mx[N*M],pa[N*M],s[N],len,col[N],ch[N*M][],d[N],cnt,a[N],w[N],st[N*M],o,hd[N];
ll val[N*M];
struct Edge{int v,nt;}E[N<<];
il char gc(){
static char*p1,*p2,S[];
if(p1==p2)p2=(p1=S)+fread(S,,,stdin);
return(p1==p2)?EOF:*p1++;
}
il int rd(){
int x=;char c=gc();
while(c<''||c>'')c=gc();
while(c>=''&&c<='')x=(x<<)+(x<<)+c-'',c=gc();
return x;
}
il void adde(int u,int v){
E[o]=(Edge){v,hd[u]};hd[u]=o++;d[u]++;
E[o]=(Edge){u,hd[v]};hd[v]=o++;d[v]++;
}
il void ins(){
/*
for(int i=1;i<=len;i++)printf("%d ",s[i]);
puts("");
*/
int lst=,np,nq,p,q,x;
for(rg int i=;i<=len;i++){
x=s[i];
p=lst; mx[lst=np=++sz]=mx[p]+;
while(p&&!ch[p][x])ch[p][x]=np,p=pa[p];
if(!p){pa[np]=;continue;}
q=ch[p][x];
if(mx[q]==mx[p]+)pa[np]=q;
else {
mx[nq=++sz]=mx[p]+;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
pa[nq]=pa[q];pa[q]=pa[np]=nq;
while(p&&ch[p][x]==q)ch[p][x]=nq,p=pa[p];
}
}
}
il void dfs(int u,int fa){
for(rg int i=hd[u];i;i=E[i].nt){
int v=E[i].v;
if(v==fa)continue;
s[++len]=col[v];
dfs(v,u);
}
if(d[u]==&&fa)ins();
len--;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("bzoj3926.in","r",stdin);
freopen("bzoj3926.out","w",stdout);
#endif
n=rd();m=rd();
for(rg int i=;i<=n;i++)col[i]=rd();
for(rg int i=o=;i<n;i++)adde(rd(),rd());
sz=;
for(rg int i=;i<=n;i++)if(d[i]==)a[++cnt]=i;
for(int i=;i<=cnt;i++){
s[len=]=col[a[i]];
dfs(a[i],);
}
for(rg int i=;i<=sz;i++)w[mx[i]]++;
for(rg int i=;i<=n;i++)w[i]+=w[i-];
for(rg int i=sz;i;i--)st[w[mx[i]]--]=i;
for(rg int i=sz,u;i;i--){
val[u=st[i]]=;
for(rg int j=;j<m;j++){
val[u]+=val[ch[u][j]];
}
}
--val[];
printf("%lld\n",val[]);
return ;
}bzoj3926
【bzoj3926】【Zjoi2015】诸神眷顾的幻想乡的更多相关文章
- bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 对[广义后缀自动机]的一些理解
先说一下对后缀自动机的理解,主要是对构造过程的理解. 构造中,我们已经得到了前L个字符的后缀自动机,现在我们要得到L+1个字符的后缀自动机,什么需要改变呢? 首先,子串$[0,L+1)$对应的状态不存 ...
- BZOJ3926 [Zjoi2015]诸神眷顾的幻想乡 字符串 SAM
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3926.html 题目传送门 - BZOJ3926 题意 给定一个有 $n$ 个节点,最多只有 $20$ ...
- BZOJ3926:[ZJOI2015]诸神眷顾的幻想乡(广义SAM)
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- [BZOJ3926][ZJOI2015]诸神眷顾的幻想乡(后缀自动机)
日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. 这时幽香发现了一件非常有趣的事情,太阳花田有n块空地.在过去 ...
- BZOJ3926 Zjoi2015 诸神眷顾的幻想乡【广义后缀自动机】
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- BZOJ3926 [Zjoi2015]诸神眷顾的幻想乡 【广义后缀自动机】
题目 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴 ...
- BZOJ3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- BZOJ3926 ZJOI2015诸神眷顾的幻想乡(广义后缀自动机)
对多串建立SAM的一种方法是建trie再对trie建SAM.构造方式分为在线(也即不建trie而是依次插入每个串,或在trie上dfs)和离线(也即建好trie再bfs).其中离线构造与单串的构造方式 ...
- bzoj3926: [Zjoi2015]诸神眷顾的幻想乡
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ3926 ZJOI2015 诸神眷顾的幻想乡 Trie、广义SAM
传送门 树上的任意一条路径一定会在以某一个叶子节点为根的树上成为一条直上直下的链,而总共只有\(20\)个叶子节点. 于是每一次选所有叶子节点中的一个作为根,形成一个\(Trie\),把\(20\)个 ...
随机推荐
- django1.11入门
快速安装指南¶ 在使用Django之前,您需要安装它.我们有 完整的安装指南,涵盖所有可能性; 本指南将指导您进行简单,最小化的安装,在您完成介绍时可以正常工作. 安装Python¶ 作为一个Pyth ...
- 基础的 sparkSQL操作
spark连接mysql操作 数据库jdbc 连接封装 package test.com import org.apache.spark.sql.{DataFrame, SparkSession} / ...
- 《The Mythical Man-Month(人月神话)》读后感(1)
临近考试周,这里我通过平时阅读的<人月神话>十九个章节和知乎.简书等网页中网友们对<人月神话>的读后感,对书中各个章节进行简单的总结,以下均为个人手打观点的思考与整合,仅供大家 ...
- git实践笔记
title: git实践笔记 date: 2016-10-15 18:40:26 tags: [Git] categories: [Tool,Git] --- 概述 本文记录常用 git 的功能和命令 ...
- maven实战读书笔记(一)
环境变量设置 MAVEN_HOME:G:\maven-3.2\apache-maven-3.2.5 Path: G:\maven-3.2\apache-maven-3.2.5\bin 其实正确的设置应 ...
- 导出excel失败,提示提示加载类型库/DDL出错
首先,这里提供的解决办法仅适用于出现如下异常的情况:无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“M ...
- gogoing软件NABCD
N,need 需求:gogoing项目目前打算做得是一个基于石家庄铁道大学在校大学生对于短期节假日出行旅游的指南.最关键的定义为“穷游”.“穷”则体现在以小的花销去实现最完美的旅游方式.我们的gogo ...
- Aspose 插件
百度:Aspose Aspose.Cells.dll Aspose.Slides.dll Aspose.Words.dll
- [二叉树建树&完全二叉树判断] 1110. Complete Binary Tree (25)
1110. Complete Binary Tree (25) Given a tree, you are supposed to tell if it is a complete binary tr ...
- HDU 2107 Founding of HDU
http://acm.hdu.edu.cn/showproblem.php?pid=2107 Problem Description 经过慎重的考虑,XHD,8600, LL,Linle以及RPG等A ...