Java教程

树上分治

本文主要是介绍树上分治,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 点分治

现在有一棵大小为 \(n\) 的树,要求出路径长度小于 \(k\) 的路径。

每次可以通过选择重心的方式,将整棵树分为一堆不大于 \(\dfrac{n}{2}\) 的子树,所以将整棵树分为大小为 \(1\) 的子树需要 \(\log n\) 次。

对于现在求出重心的子树,显然有三种情况可以组成一条路径。

  1. 路径两端点均在某一子树内
  2. 路径两端点在不同子树内
  3. 路径某一端点为重心
这篇关于树上分治的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!