bzoj3522: [Poi2014]Hotel 长链剖分+树形DP

bzoj3522\4543: [Poi2014]Hotel

Description

有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达。吉丽要给他的三个妹子各开(一个)房(间)。三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽满意,你需要让三个房间两两距离相同。
有多少种方案能让吉丽满意?

Input

第一行一个数n。
接下来n-1行,每行两个数x,y,表示x和y之间有一条边相连。

Output

让吉丽满意的方案数。

Sample Input

7
1 2
5 7
2 5
2 3
5 6
4 5

Sample Output

5

HINT

【样例解释】
{1,3,5},{2,4,6},{2,4,7},{2,6,7},{4,6,7}
【数据范围】
n≤5000(bzoj4543是1e5)
Source
By Dzy

分析

首先一句话题意:求树上三点两两相同的无序点对个数
转化一下显然转化到三点都某同一点的距离相等。
考虑dfs并统计子树内的答案。
显然答案只能分为如下两种

我们先考虑前两个点 u,v u , v 深度(到子树根的距离,下同)要一样,那么他们到lca的距离也一样,假设他们到lca的距离为d,lca深度为a,我们发现不管是哪种情况,w到根的距离都是d-a。
d-a不够优美,于是我们假设lca的深度为d-a,那么w到根的距离就是a了。
fi,j f i , j 表示以i为根的子树深度为j的点的个数。
gi,j g i , j 表示以i为根的子树到lca的距离和lca到根距离差为j的点对个数。
首先考虑答案,我们用合并子树的方式进行树形DP_
那么有 ans=fu

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值