CodeChef Tree Palindromes
Tree Palindromes
Given a tree rooted at node 1 with N nodes, each is assigned a lower case latin character. Print the sum of length of longest palindrome substring from string generated by simple path from root to all other nodes i.e root to some other node (say x) will represent a string, find its lps length and add it to answer for all such nodes x. Then print final answer.
1 ≤ N ≤ 105
题解
翁文涛《回文树及其应用》。
回文树也可以有类似AC自动机的不全转移,不过这个补全是间接性的。

\(t=even\) 的时候要特殊处理。考虑实际意义(或者get_fail过程)可知 \(quick_{even}[c]=odd\)。
有了这个Trie上就好做了。

本题字符集较小,在插入的时候,没有必要将失配转移可持久化,直接开一个数组记录即可。时间复杂度 \(O(n\Sigma)\)。
CO int N=100000+10;
vector<int> to[N];
namespace PAM{
int str[N],n;
int tot;
int ch[N][26],trans[N][26],fa[N],len[N];
IN void init(){
memset(str,-1,sizeof str);
tot=1;
fa[0]=fa[1]=1;
len[0]=0,len[1]=-1;
fill(trans[0],trans[0]+26,1);
}
int extend(int p,int c){
if(str[n-len[p]-1]!=str[n]) p=trans[p][c];
if(!ch[p][c]){
int cur=++tot;
len[cur]=len[p]+2;
fa[cur]=ch[trans[p][c]][c];
ch[p][c]=cur;
copy(trans[fa[cur]],trans[fa[cur]]+26,trans[cur]);
trans[cur][str[n-len[fa[cur]]]]=fa[cur];
}
return ch[p][c];
}
}
char tree[N];
int last[N],res[N];
LL ans;
void dfs(int x,int fa){
PAM::str[++PAM::n]=tree[x]-'a';
last[x]=PAM::extend(last[fa],tree[x]-'a');
res[x]=max(res[fa],PAM::len[last[x]]);
ans+=res[x];
for(int i=0;i<(int)to[x].size();++i)
if(to[x][i]!=fa) dfs(to[x][i],x);
--PAM::n;
}
int main(){
int n=read<int>();
scanf("%s",tree+1);
for(int i=1;i<n;++i){
int u=read<int>(),v=read<int>();
to[u].push_back(v),to[v].push_back(u);
}
PAM::init();
dfs(1,0);
printf("%lld\n",ans);
return 0;
}
CodeChef Tree Palindromes的更多相关文章
- codechef Tree and Queries Solved
题目链接: https://www.codechef.com/problems/IITK1P10 大概是:修改点值,求子树节点为0有多少个, DFS序后,BIT 询问,修改 ; { ...
- BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )
树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...
- Codechef Observing the Tree
Home » Practice(Hard) » Observing the Tree https://www.codechef.com/problems/QUERY Observing the T ...
- 【CodeForces】914 E. Palindromes in a Tree 点分治
[题目]E. Palindromes in a Tree [题意]给定一棵树,每个点都有一个a~t的字符,一条路径回文定义为路径上的字符存在一个排列构成回文串,求经过每个点的回文路径数.n<=2 ...
- Codechef Union on Tree
Codechef Union on Tree https://www.codechef.com/problems/BTREE 简要题意: 给你一棵树,\(Q\)次询问,每次给出一个点集和每个点的\(r ...
- 【启发式搜索】Codechef March Cook-Off 2018. Maximum Tree Path
有点像计蒜之道里的 京东的物流路径 题目描述 给定一棵 N 个节点的树,每个节点有一个正整数权值.记节点 i 的权值为 Ai.考虑节点 u 和 v 之间的一条简单路径,记 dist(u, v) 为其长 ...
- Codechef March Cook-Off 2018. Maximum Tree Path
目录 题意 解析 AC_code @(Codechef March Cook-Off 2018. Maximum Tree Path) 题意 给你一颗\(n(1e5)\)个点有边权有点权的树,\(Mi ...
- [Codechef - ADITREE] Adi and the Tree - 树链剖分,线段树
[Codechef - ADITREE] Adi and the Tree Description 树上每个节点有一个灯泡,开始所有灯泡都是熄灭的.每次操作给定两个数 \(a,b\) ,将 \(a,b ...
- codechef Prime Distance On Tree(树分治+FFT)
题目链接:http://www.codechef.com/problems/PRIMEDST/ 题意:给出一棵树,边长度都是1.每次任意取出两个点(u,v),他们之间的长度为素数的概率为多大? 树分治 ...
随机推荐
- 【2019年05月16日】A股最便宜的股票
查看更多A股最便宜的股票:androidinvest.com/CNValueTop/ 经典价值三因子选股: 市盈率PE.市净率PB 和 股息分红率,按照 1:1:1的权重,选择前10大最便宜的股票. ...
- 解决Spring和SpringMVC扫描注解类的冲突问题
原文地址:https://blog.csdn.net/xiaobao5214/article/details/52042041 最正确的配置方式:在主容器中applicationContext.xml ...
- Beta冲刺(3/7)——2019.5.25
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...
- spring aop 一个挡板例子
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...
- 所谓的SaaS服务到底是什么?
先从SaaS说起,SaaS是英文Soft as a Service(软件即服务)的简写.SaaS并不是指代一个行业或者一种技术,它是一种2B的专业型软件租赁使用模式. 什么是专业型软件? 就是为了解决 ...
- SpringCloud 基础
目录 SpringCloud 基础 一.概述 二.服务发现组件 Eureka 1. 介绍 2. 搭建 Maven 父工程 3. 创建 Eureka 集群 4. 创建服务提供方集群 5. 创建服务消费方 ...
- MQTTv5.0 ---AUTH – 认证交换
AUTH报文被从客户端发送给服务端,或从服务端发送给客户端,作为扩展认证交换的一部分,比如质询/ 响应认证.如果CONNECT报文不包含相同的认证方法,则客户端或服务端发送AUTH报文将造成协议错 误 ...
- java中static和final修饰符
static和final修饰符 一.static修饰符 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. ...
- Wireshark教程之一:认识Wireshark界面
1.下载与安装 官网地址:https://www.wireshark.org/ 官网下载地址:https://www.wireshark.org/#download 本文以windows环境为例来说明 ...
- 自定义HTTP消息拦截
/// <summary> /// HTTP消息拦截器 /// </summary> public class RequestHandler : DelegatingHandl ...