bzoj3697: 采药人的路径(点分治)

该博客介绍了如何使用点分治方法解决一类树形结构问题,即在给定的树中寻找由两条不同边类型且长度相等的路径组成的路径总数。通过将边类型转化为边权,将问题简化为找路径和为0的路径组合。作者分析了四种可能的情况,并详细阐述了点分治的处理过程,包括容斥原理的应用。最后,博客提供了相应的代码实现。
摘要由CSDN通过智能技术生成

传送门
点分治好题。
题意:给出一棵树,边分两种,求满足由两条两种边数相等的路径拼成的路径数。


思路:
考虑将边的种类转化成边权 − 1 -1 1 1 1 1,这样就只用考虑由两条权值为 0 0 0的路径拼成的路径数。
然后发现对于一个点 p p p,经过它的这样的路径满足如下至少一个条件:

  1. ∃ v \exist v v满足 d i s t ( v , p ) = 0 & & ∃ v 0 ∈ r o a d v , p dist(v,p)=0\&\&\exist v_0\in road_{v,p} dist(v,p)=0&&v0roadv,p满足 d i s t ( v 0 , v ) = 0 dist(v_0,v)=0 dist(v0,v)=0
  2. ∃ v 1 , v 2 \exist v_1,v_2 v1,v2满足$dist(v_1,p)=0,dist(v_2,p)=0
  3. ∃ v 1 , v 2 \exist v_1,v_2 v1,v2满足 d i s t ( v 1 , p ) + d i s t ( v 2 , p ) = 0 & & ∃ v 0 ∈ r o a d v 1 , p dist(v_1,p)+dist(v_2,p)=0\&\&\exist v_0\in road_{v_1,p} dist(v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值