Codeforces 914E 点分治

文章介绍了Codeforces914E问题的解决方案,该问题涉及到字符串的回文串排列。主要思想是利用点分治策略,通过计算路径上字符的奇偶性来判断是否形成回文串,复杂度为O(20nlogn)。文章提供了C++代码实现。
题意

传送门 Codeforces 914E Palindromes in a Tree

题解

一个字符串存在一个回文串排列,当且仅当字符串中出现次数为奇数的字符不超过一个。以 v v v 为根, a u a_u au 代表根到节点 u u u 间字母的奇偶性,则通过 v v v 的路径 u → w u\rightarrow w uw 可以表为 a u ⊕ a w ⊕ a v a_u\oplus a_w\oplus a_v auawav

考虑点分治。每次处理仅考虑通过重心的路径。对于重心,依次考虑子树贡献。对于非重心 u u u,这样的路径的一个端点必然在 u u u 的子树内,递归相加即可。总时间复杂度 O ( 20 n log ⁡ n ) O(20n\log n) O(20nlogn)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int C 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值