BZOJ3926&&lg3346 ZJOI诸神眷顾的幻想乡(广义后缀自动机)
BZOJ3926&&lg3346 ZJOI诸神眷顾的幻想乡(广义后缀自动机)
题面
自己找去
HINT
我们可以把题目拆解成几个部分,首先我们手玩一个结论,从所有的叶子节点出发,遍历整颗树,这里面一定包括了所有的文本串,既然如此,就上广义后缀自动机维护,然后本质不同子串个数,也就是\(\sum_{u=2}^{tot}{node[u].len-node[fa].len}\),然后这题就OK了
#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int w=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        w=(w<<3)+(w<<1)+ch-48;
        ch=getchar();
    }
    return w*f;
}
int n,m,val[2000010];
struct SUFFIXAUTOMATON{
    struct Node{
        int len,fa;
        int ch[20];
    }node[2000010];
    int lst,tot,root;
    inline void init(){
        lst=tot=root=1;return;
    }
    inline void extend(int now){
        int p=lst;tot++;lst=tot;int np=tot;
        node[np].len=node[p].len+1;
        while(p&&!node[p].ch[now]){
            node[p].ch[now]=np;
            p=node[p].fa;
        }
        if(!p) node[np].fa=1;
        else{
            int q=node[p].ch[now];
            if(node[q].len==node[p].len+1){
                node[np].fa=q;
            }
            else{
                int nq=++tot;node[nq]=node[q];
                node[nq].len=node[p].len+1;
                node[q].fa=nq;node[np].fa=nq;
                while(p&&node[p].ch[now]==q){
                    node[p].ch[now]=nq;
                    p=node[p].fa;
                }
            }
        }
    }
}SAM;
int cnt,head[2000010],du[2000010];
struct Edge{
    int from,to,next;
}edge[4000010];
inline void addedge(int u,int v){
    cnt++;
    edge[cnt].from=u;
    edge[cnt].to=v;
    edge[cnt].next=head[u];
    head[u]=cnt;du[u]++;
}
inline void dfs(int u,int fa){
    SAM.extend(val[u]);int cur=SAM.lst;
    for(int i=head[u];i;i=edge[i].next){
        int v=edge[i].to;if(v==fa) continue;
        SAM.lst=cur;dfs(v,u);
    }
    return;
}
int main(){
    n=read();m=read();SAM.init();
    for(int i=1;i<=n;i++){
        val[i]=read();val[i]++;
    }
    for(int i=1;i<n;i++){
        int x=read();int y=read();
        addedge(x,y);addedge(y,x);
    }
    for(int i=1;i<=n;i++){
        if(du[i]!=1) continue;
        SAM.lst=1;dfs(i,0);
    }
    long long ans=0;
    for(int i=1;i<=SAM.tot;i++){
        int f=SAM.node[i].fa;
        ans+=SAM.node[i].len-SAM.node[f].len;
    }
    cout<<ans<<endl;
    return 0;
}
												
											BZOJ3926&&lg3346 ZJOI诸神眷顾的幻想乡(广义后缀自动机)的更多相关文章
- 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
		
[BZOJ3926][Zjoi2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝 ...
 - BZOJ 3926 && ZJOI 2015 诸神眷顾的幻想乡 (广义后缀自动机)
		
3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽 ...
 - BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 [广义后缀自动机 Trie]
		
3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1124 Solved: 660[Submit][S ...
 - bzoj 3926: 诸神眷顾的幻想乡 广义后缀自动机
		
题目: Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给 ...
 - bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机模板
		
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...
 - 【BZOJ3926】【ZJOI2015】诸神眷顾的幻想乡 广义后缀自动机
		
题目: 题目在这里 思路&做法: 参考的题解 既然只有\(20\)个叶子节点, 那么可以从每个叶子节点往上建一颗\(trie\)树, 然后合并成一棵大的\(trie\)树, 然后构建广义后缀自 ...
 - BZOJ.3926.[ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)
		
题目链接 要对多个串同时建立SAM,有两种方法: 1.将所有串拼起来,中间用分隔符隔开,插入字符正常插入即可. 2.在这些串的Trie上建SAM.实际上并不需要建Trie,还是只需要正常插入(因为本来 ...
 - 洛谷P3346 [ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)
		
题意 题目链接 Sol 广义SAM的板子题. 首先叶子节点不超过20,那么可以直接对每个叶子节点为根的子树插入到广义SAM中. 因为所有合法的答案一定是某个叶子节点为根的树上的一条链,因此这样可以统计 ...
 - BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机 后缀自动机 字符串
		
https://www.lydsy.com/JudgeOnline/problem.php?id=3926 广义后缀自动机是一种可以处理好多字符串的一种数据结构(不像后缀自动机只有处理一到两种的时候比 ...
 
随机推荐
- MySql在Windows下自动备份的几种方法
			
以下几种全部是批处理命令中对于备份文件 1.复制date文件夹备份============================假想环境:MySQL 安装位置:C:\MySQL论坛数据库名称为:bbs数 ...
 - 【python-leetcode206-翻转链表】反转链表
			
问题描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可 ...
 - pikachu-远程代码、命令执行漏洞(RCE)
			
一.RCE概述 1.1 什么是RCE? RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 1.2 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要 ...
 - 关于广州xx公司对驰骋BPM, 流程引擎表单引擎 常见问题解答
			
关于广州xx公司对驰骋BPM, 流程引擎表单引擎 常见问题解答 @驰骋工作流,ccflow周朋 周总早, ccflow 功能很强大,在体验过程中,以下几个问题需沟通下: 先使用.net 再使用java ...
 - SAP 序列号与库存关联起来?
			
SAP 序列号与库存关联起来? SAP系统标准功能可以实现序列号管理.其系统配置也不复杂,但是不少企业却使用不起来.笔者参与的诸多项目里,只有现在所在的项目里有启用序列号管理.基于项目客户所在行业,以 ...
 - Android 有关在ListView RecycleView 中使用EditText Checkbox的坑
			
这是一篇文字超多的博客,哈哈哈,废话自行过滤··· 遇到问题 在开发中我们常会在ListView , RecycleView 列表中添加EditText输入框,或者checkbox复选框. 复选框 ...
 - Python中的用open打开文件错误,FileNotFoundError: [Errno 2] No such file or directory:
			
学习python的文件处理,刚开始打开文件,代码如下 f = open('test_file.txt', 'r', encoding='UTF-8')RES = f.readlines()print( ...
 - 手动配置IP地址
			
更改适配器属性 -> 选择一个网络,单击右键 -> 属性 -> Internet 协议版本 4 (TCP/IPv4)-> 属性 进入如下界面,开始配置: IP地址: IP地址用 ...
 - 已发布的WEB项目,如何挂在服务器或者本机的IIS下
			
第一步:打开IIS,在打开的IIS中,右击 “Default Web Site”,在弹出对话框中选择“新增应用程式”,参照如下图,设置相应参数. 第二步:在已经发布的项目文件系统添加在站点下后,点击项 ...
 - Dictionary的基本用法
			
1.创建泛型哈希表,然后加入元素 Dictionary<string,string> openWith=new Dictionary<string, string>(); op ...