摘要:"原题链接" 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上。 显然对于在一个边双连通分量里的点已经满足要求,所以可以用$tarjan$找边双并缩点。 对于缩点后的树,先讲下我自己的弱鸡做法,每次找直径,因为将直径改为环显然使得新添的边贡献最大,这样贪心的连下去,直到所有点满足要求为止
阅读全文
摘要:一道基环树的直径 "BZOJ原题链接" "洛谷原题链接" 又是一道实现贼麻烦的题。。 显然公园其实是基环树森林,求的最长距离其实就是求每一棵基环树的直径的总和。 对于每棵基环树,其直径要么经过环,要么是某个环上点的子树的直径。所以我们可以先找出它的环,然后对环上的每个点进行$dfs$(不能经过环上的
阅读全文
摘要:一道树的直径 "树网的核 BZOJ原题链接" "树网的核 洛谷原题链接" "消防 BZOJ原题链接" "消防 洛谷原题链接" ~~一份代码四倍经验,爽~~ 显然要先随便找一条直径,然后直接枚举核的两个端点,对每一次枚举的核遍历核上的每个点,用$dfs$求出核外节点到核的最大值即可,时间复杂度为$O(
阅读全文
摘要:一道树的直径 "BZOJ原题链接" "洛谷原题链接" 显然在原图上路线的总长为$2(n 1)$。 添加第一条边时,显然会形成一个环,而这条环上的所有边全部只需要走一遍。所以为了使添加的边的贡献最大化,我们找出树的直径,将其两端点连上边即可。 设直径长$L$,于是路线总长就变为$2(n 1) L+1=
阅读全文