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

该博客探讨了bzoj 3696化合物问题的树形DP解决方案,并详细分析了其复杂度。作者首先介绍了题目的背景和要求,然后指出暴力解法的复杂度为n²*log,接着讨论了通过枚举LCA优化后的复杂度,证明了树形DP的复杂度实际上为n*maxdep,其中maxdep为最大深度。博客强调了理解每个点的贡献对于分析复杂度的重要性。
摘要由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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值