题目链接
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 n2∗log,这个应该都没问题,不细讲了。
再一步想到枚举lca
void dfs(int u)