基环树
基环树
基环树又称环套树。但是它不是树,而是图。
定义:
具有N个点N条边的连通图。可以发现只有一个环,并且删掉环上任意一个边可以变成一棵树。
如果不保证联通,它就会成为基环树森林。

如图,显然断掉中间环的任意一条边就会变成一颗树。
种类:
基环树有内向树和外向树。
内向树:每个点有且仅有一条出边。
将上方的基环树变成内向树为:

外向树:每个点有且仅有一条入边。
变成外向树为:

操作:
求基环树的直径,求基环树两点之间的距离,基环树dp等。
基环树一般分成环和树来处理,即“断环成树”,先处理好树后,再考虑环对树的贡献。
处理:
可以这么理解,基环树=多个子树+环。
树就进行常规操作即可。
环的话,可以直接用 \(tarjan\) /se/se。
例题
基环树+树形dp。
显然,如果将每个骑士与自己最痛恨的骑士连起来的话,会组成一个基环树。
将\(x\)讨厌的人\(y\)设为\(x\)的父亲节点。
由于每个人只有一条出边,则环上一定包含根节点,因为每个点都只有一个出度,非根节点每个点的出度都贡献给父节点,而根节点只能贡献给他的后代。
所以我们考虑在基环树的环上删掉一条边,则必然变成树。而边上至少有一个点不取,可以分别以两个端点为根进行树形DP,分别存在\(f[i][0/1]\)和\(g[i][0/1]\)中。

浙公网安备 33010602011771号