摘要:
传送门 仍然是大规模解决树上路径的问题。 显然是点分治,但是因为我太菜了想不到应该怎么点分治,还是借鉴dalao的经验才想出来。 我们用tmp[i]表示在当前子树中,经过长度为i的路径最少需要几条边。那么转移的方程就是tmp[m] = tmp[m-dis[i]] + d[i],其中m是要求的路径长度 阅读全文
摘要:
传送门 这道题看起来是大规模解决树上路径的问题……那就是点分治啦。 既然我们要求的是树上长度为3的倍数的路径有多少条,那么我们不妨对每条路径的长度取模,这样的话我们实际上就获得了一堆长度为0,1,2的路径。因为点分治的性质,它每次只统计当前子树内经过重心的长度为3的倍数的路径,所以我们在每次统计之后 阅读全文
摘要:
啥是点分治? 点分治一般来说用于解决大规模的树上路径问题。比如说最经典的一道题,给定一棵树,计算一共有多少点对满足之间距离<=k。 这种题一般数据范围在10^4~10^5,直接暴力求是n^2的肯定会超时。 那怎么办?我们考虑分治。 先说一下点分治的基本思想,就是对于每一棵树,先找到这棵树的重心。 啥 阅读全文