随笔分类 - 具体问题 / 图论 / 基环树
摘要:前言 终于可以有底气的显然了 思路 这道题在考场上时间不够了, 但我是做得出来的吧 在这推一遍, 检查一下 首先套路的, 先处理树在处理环 对于树上的情况, 令 \(f_{u, 0/1, 0/1}\) 表示 \(u\) 子树, 是否选择 \(u\) 为关键点, \(u\) 的儿子中是否有关键点 (显
阅读全文
摘要:算法 对于一棵树的情况, dfs + 贪心选取显然是正确的 对于基环树的情况 我们观察到城市不能重复行走 所以长为 \(L\) 的环最多只会被访问 \(L - 1\) 条边 枚举断边, 再跑 dfs + 贪心即可 代码 #include <bits/stdc++.h> const int MAXN
阅读全文
摘要:算法 观察到把每个 \(a_i\) 向 \(i\) 连边, 形成一个外向基环树森林 问题转化为 在一个基环树上, 选择一个点后, 其儿子节点至少有一个不能选, 求最大选点个数 对于森林中的每一棵基环树 容易想到找环, 对于环上每一点, 问题转化为树上的上述问题 显然是树形 dp 令 \(f_{x,
阅读全文
摘要:算法 题意可以转化成 给定一个基环树森林, 求每颗基环树上的直径长度之和 找环 按照基环树的方法找即可 求直径 (i) 直径不经过环 对于以环上每一个点的子树, 记录直径即可 (ii) 直径经过环 断环为链, 考虑单调队列处理, 具体的 关于为什么需要断环为链: 方便快速处理环上两点间的距离, 显然
阅读全文

浙公网安备 33010602011771号