基环树

基环树

基环树又称环套树。但是它不是树,而是图。

定义:

具有N个点N条边的连通图。可以发现只有一个环,并且删掉环上任意一个边可以变成一棵树。

如果不保证联通,它就会成为基环树森林。

如图,显然断掉中间环的任意一条边就会变成一颗树。


种类:

基环树有内向树和外向树。

内向树:每个点有且仅有一条出边。

将上方的基环树变成内向树为:

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

变成外向树为:


操作:

求基环树的直径,求基环树两点之间的距离,基环树dp等。

基环树一般分成环和树来处理,即“断环成树”,先处理好树后,再考虑环对树的贡献。


处理:

可以这么理解,基环树=多个子树+环。

树就进行常规操作即可。

环的话,可以直接用 \(tarjan\) /se/se。


例题

ZJOI2008骑士

基环树+树形dp。

显然,如果将每个骑士与自己最痛恨的骑士连起来的话,会组成一个基环树。

\(x\)讨厌的人\(y\)设为\(x\)的父亲节点。

由于每个人只有一条出边,则环上一定包含根节点,因为每个点都只有一个出度,非根节点每个点的出度都贡献给父节点,而根节点只能贡献给他的后代。

所以我们考虑在基环树的环上删掉一条边,则必然变成树。而边上至少有一个点不取,可以分别以两个端点为根进行树形DP,分别存在\(f[i][0/1]\)\(g[i][0/1]\)中。

posted @ 2023-06-19 19:42  XYini  阅读(14)  评论(0)    收藏  举报