bzoj 3696 化合物 树形dp (附复杂度证明!!!)

题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=2318题目大意介于这是一道权限题,先讲一下题意有一棵根节点编号为1的数,给出每一个节点的父亲。对于点对(x,y),令他们的LCA为k,定义这对点对的A值为dis[x][k])^dis[y][k],dis即为两点间的最短距离(边数),最后求出对于x=(1…n),A值为x的点对的数量...
摘要由CSDN通过智能技术生成

题目链接

https://www.lydsy.com/JudgeOnline/problem.php?id=2318

题目大意

介于这是一道权限题,先讲一下题意
有一棵根节点编号为1的数,给出每一个节点的父亲。
对于点对(x,y),令他们的LCA为k,定义这对点对的A值为dis[x][k])^dis[y][k],dis即为两点间的最短距离(边数),
最后求出对于x=(1…n),A值为x的点对的数量。
点数1e5,且题目保证最大的深度为500

前言

看到这道题马上想到树形dp,但是冷静下来分析一下,发现复杂度不太对,写了一下发现跑的飞快,百度了一下这道题的题解,连hzwer大佬都说复杂度不会分析,不过在大佬的帮助下我得知了如何证明复杂度,这里想和大家分享一下。

正文

最暴力的做法就是枚举两个点,算一下lca,两个深度异或一下加到答案里,复杂度 n 2 ∗ l o g n^2*log n2log,这个应该都没问题,不细讲了。
再一步想到枚举lca

void dfs(int u)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值