bzoj3929(sam)
因为题目中树的特殊性暴力dfs建sam就好了。然后sam有一个有意思的性质是一个点代表的子串个数等于mx[i]-mx[fail[i]],至于为什么,我不会严谨的证明,但想想还是可以的,就是当前串的所有后缀减去前面已经表示过的后缀吗。其实这个个数也可以一个dp跑出来的,只不过这种方法更卓越。
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int ss[maxn],ch[maxn*][],fa[maxn*],dis[maxn*],cur=,cnt=;
int n,last[maxn],pre[maxn],other[maxn],cc[maxn],du[maxn],C,t;
int add(int c,int p){
cur=++cnt;
dis[cur]=dis[p]+;
for(;p&&!ch[p][c];p=fa[p])ch[p][c]=cur;
if(!p)fa[cur]=;
else{
int q=ch[p][c];
if(dis[q]==dis[p]+)fa[cur]=q;
else{
int nt=++cnt;dis[nt]=dis[p]+;
memcpy(ch[nt],ch[q],sizeof(ch[]));
fa[nt]=fa[q];fa[q]=fa[cur]=nt;
for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nt;
}
}
return cur;
}
void dfs(int x,int fa,int p){
int tmp=add(cc[x],p);
for(int i=last[x];i;i=pre[i]){
int v=other[i];
if(v==fa)continue;
dfs(v,x,tmp);
}
}
void insert(int x,int y){++t;pre[t]=last[x];last[x]=t;other[t]=y;}
int main(){
int x,y;
cin>>n>>C;
for(int i=;i<=n;++i)scanf("%d",&cc[i]);
for(int i=;i<n;++i){
scanf("%d%d",&x,&y);
du[x]++;du[y]++;
insert(x,y);insert(y,x);
}
for(int i=;i<=n;++i)if(du[i]==){
dfs(i,,);
}
long long ans=;
for(int i=;i<=cnt;++i)
ans+=dis[i]-dis[fa[i]];
cout<<ans;
//system("pause");
return ;
}
bzoj3929(sam)的更多相关文章
- SAM初探
SAM,即Suffix Automaton,后缀自动机. 关于字符串有很多玩法,有很多算法都是围绕字符串展开的.为什么?我的理解是:相较于数字组成的序列,字母组成的序列中每个单位上元素的个数是有限的. ...
- bzoj4199:NOI2015D2T2品酒大会(SAM版)
SAM感觉写起来比SA更直观(?) #include <iostream> #include <cstdio> #include <cstring> #includ ...
- SAM/BAM文件处理
当测序得到的fastq文件map到基因组之后,我们通常会得到一个sam或者bam为扩展名的文件.SAM的全称是sequence alignment/map format.而BAM就是SAM的二进制文件 ...
- hihocoder SAM基础概念
后缀自动机一·基本概念 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:今天我们来学习一个强大的字符串处理工具:后缀自动机(Suffix Automaton,简称 ...
- bam/sam格式说明
在SAM输出的结果中每一行都包括十二项通过Tab分隔,从左到右分别是: 1 序列的名字(Read的名字) 2 概括出一个合适的标记,各个数字分别代表 1 序列是一对序列中的一个 2 比 ...
- mismatch位置(MD tag)- sam/bam格式解读进阶
这算是第二讲了,前面一讲是:Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶 MD是mismatch位置的字符串的表示形式,貌似在call SNP和indel的时候会用 ...
- Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶
sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...
- pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)
在开发基因组相关流程或工具时,经常需要读取.处理和创建bam.vcf.bcf文件.目前已经有一些主流的处理此类格式文件的工具,如samtools.picard.vcftools.bcftools,但此 ...
- SAM格式 及 比对工具之 samtools 使用方法
参考资料: SAMtools(官网) SAM Spec v1.4 (SAM格式 说明书) (重要) samtools-1.3.1 使用手册 (SAMtools软件说明书) samtools常用命令详解 ...
随机推荐
- XSY contest1586 proB
题目 现在一圈n个花坛, 每次随机往一个花盆里种花, 一个花盆可以种多颗花, 假如一个花盆两边的花盆都有花, 那么他也将被种上花 问期望种满所有花盆要种几次 首先定义f(i)为放置了i个物品后完全覆盖 ...
- python3:实现字符串的全排列(有重复字符)
抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321. 解决方案 #字符串任意两个位置字符交换 def str_replace(str, x ...
- AtomicInteger类和int原生类型自增鲜明的对比
AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题.比如说 int i = 0 ; i++; 上面的写法是线程不安全的. 有的人可能会说了,可以使 ...
- 2101244 - FAQ: SAP HANA Multitenant Database Containers (MDC)
Symptom You face issues or have questions related to multitenant database containers in SAP HANA env ...
- 图释SQL的Join
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- @RestController 与 @Controller @RequestMapping("/") 区别很大
后者可以通过返回字符串,返回到指定路径的html http://localhost:8080/ 这样显示 ,但是仍以get方式请求的. https://www.cnblogs.com/zgqys19 ...
- 虚拟网络VDC与VPC
当前互联网行业,内部 IT 基础资源云端化是主要趋势.云平台将资源管理抽象出来,比如云主机.云 DB 等,以服务的方式提供给用户,按需使用,从而带来更大的灵活性与经济性. 随着主机.DB.缓存.存储等 ...
- pymysql 读取数据库没有字段
import pymysql # 打开数据库连接db = pymysql.connect("localhost", "root", "root&quo ...
- Spring使用Jackson处理json数据
1.搭建SpringMVC+Spring环境 2.配置web.xml.SpringMVC-config.xml <?xml version="1.0" encoding=&q ...
- 根据文件夹更改样本文件名小程序.py
#按照文件名设置标签并将其插入文件名中import osimport shutil#获取目标文件夹的路径a= r'C:\Users\yy\Desktop\tianchi大赛\guangdong_rou ...