毒瘤的树上问题
这道题是树网的核的加强版:观察题目,我们会发现,那条修建的路径一定在树的直径上:那么我们首先通过两边bfs求出树上直径,再通过dfs求出直径的点和直径上的前缀和。然后我们二分答案,二分一个最远距离,如何check呢?我们要用一点逆向思维:考虑通过头,尾指针的移动:头指针初始在一个端点,尾指针在另一个端点。每次都尽量向中间靠拢,直到最大距离超过mid为止,然后检查一下路径的长度是否超过限制就好了。
// luogu-judger-enable-o2#include #include #include #include #include #include