基环树
特征
- 图中只有一个环。
- \(N=M\)。
分类
-
无向图上的基环树
性质:去掉环上任一条边,图变为一棵树。 -
内向基环树:一些边像河流一样流入一个环。可以看作一个环的一些节点上分别挂着一棵“反树”。
性质:所有点的出度 \(=1\) 是它的充要条件。 -
外向基环树:边从一个环出发离开这个环。
性质:所有点的入度 \(=1\) 是它的充要条件。
注意
把环缩成一个虚点后,如果原本是无向图,那么它现在一定是一棵树;如果原本是有向图,不一定是一棵树。
一般思路与方法
- 找到唯一的那个环,并把它当成虚点。
- 无向图上,用拓扑排序找环:结束后度数为 \(1\) 的就是环上的点。(该方法只适用于基环树)
- 如果只要找环上一个点:若一个点被 \(dfs\) 访问到 \(2\) 次,则在环上。(适用于有向图与无向图)
算法
- 拓扑排序:对有向基环树,可以先对环外树部分拓扑排序,环上节点顺序需特殊处理。
- 动态规划:在基环树上 \(dp\) 时,常用断环为链的方法:找环,断开环上一条边,枚举断边两端点的状态,转化为树问题。
- 最短路:基环树上的最短路要分经过环和不经过环讨论。
例题
基础
P2607 [ZJOI2008] 骑士
因为每个人有且仅有一个讨厌的人,所以如果每个人让他讨厌的人向他连边,就形成了一棵外向基环树。但是注意到图不一定连通,事实上可能会形成基环树森林。
基环树,说到底还是一棵树。那么在外向基环树上要找到基环,就得沿着每个点的父亲(等同于是一棵树上,从儿子走到父亲)走才能保证走到环内,所以得记录每个点 \(i\) 的 \(fa_i\)。而在做树形 \(dp\) 的时候,要从儿子上传答案,所以得用 \(vector\) 存走向儿子的有向边。
为什么断环为链后,找另一个端点用 \(fa\)?因为一个环上的点,它的儿子可能出环了,但是它的父亲一定还是环上的点。

浙公网安备 33010602011771号