基环树

特征

  1. 图中只有一个环。
  2. \(N=M\)

分类

  1. 无向图上的基环树
    性质:去掉环上任一条边,图变为一棵树。

  2. 内向基环树:一些边像河流一样流入一个环。可以看作一个环的一些节点上分别挂着一棵“反树”。
    性质:所有点的出度 \(=1\) 是它的充要条件。

  3. 外向基环树:边从一个环出发离开这个环。
    性质:所有点的入度 \(=1\) 是它的充要条件。

注意

把环缩成一个虚点后,如果原本是无向图,那么它现在一定是一棵树;如果原本是有向图,不一定是一棵树。

一般思路与方法

  1. 找到唯一的那个环,并把它当成虚点。
  2. 无向图上,用拓扑排序找环:结束后度数为 \(1\) 的就是环上的点。(该方法只适用于基环树)
  3. 如果只要找环上一个点:若一个点被 \(dfs\) 访问到 \(2\) 次,则在环上。(适用于有向图与无向图)

算法

  1. 拓扑排序:对有向基环树,可以先对环外树部分拓扑排序,环上节点顺序需特殊处理。
  2. 动态规划:在基环树上 \(dp\) 时,常用断环为链的方法:找环,断开环上一条边,枚举断边两端点的状态,转化为树问题。
  3. 最短路:基环树上的最短路要分经过环和不经过环讨论。

例题

基础

P2607 [ZJOI2008] 骑士
因为每个人有且仅有一个讨厌的人,所以如果每个人让他讨厌的人向他连边,就形成了一棵外向基环树。但是注意到图不一定连通,事实上可能会形成基环树森林。

基环树,说到底还是一棵树。那么在外向基环树上要找到基环,就得沿着每个点的父亲(等同于是一棵树上,从儿子走到父亲)走才能保证走到环内,所以得记录每个点 \(i\)\(fa_i\)。而在做树形 \(dp\) 的时候,要从儿子上传答案,所以得用 \(vector\) 存走向儿子的有向边。

为什么断环为链后,找另一个端点用 \(fa\)?因为一个环上的点,它的儿子可能出环了,但是它的父亲一定还是环上的点。

posted @ 2025-11-17 20:01  Sqqqz185  阅读(3)  评论(0)    收藏  举报