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常用命令详解 ...
随机推荐
- k8s学习笔记之二:使用kubeadm安装k8s集群
一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...
- 有哪些你不知道的python小工具
python作为越来越流行的一种编程语言,不仅仅是因为它语言简单,有许多现成的包可以直接调用. python中还有大量的小工具,让你的python工作更有效率. 1.- 快速共享 - HTTP服务器 ...
- 【Linux】【Jenkins】编译过程中遇到ERROR: Failed to parse POMs的解决方案
自动化构建的时候报错,网搜查询说是maven的jenkinks配置问题导致的.修改系统工具配置的maven配置就可以了 Started by user XX Building in workspace ...
- JavaScript获取、修改CSS样式合辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Docker 安装 oracle 并使用 navicat 实现外部连接
1,拉取 docker 镜像:docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 1.1 , 该镜像由阿里云提供,比较大, ...
- python入门学习1
实学习每一种语言,都可以找到很快乐的学习方法.有兴趣,有乐趣,才会一直想学.知道print().input().if/else就可以做一个简陋的游戏了. print() # 打印函数,将信息打印出来 ...
- maven学习-基本入门用法
一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录(本 ...
- .Net 中读写Oracle数据库常用两种方式
.net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...
- SpringBoot打成jar包的配置方式
pom.xml中添加Springboot插件 <build> <plugins> <plugin> <groupId>org.springframewo ...
- 坑之mysql 字符串与数字操作
select "123"+1 = 124; select "1a23"+1 = 2; select "aa23"+1 = 1; select ...