• 浅谈基环树(环套树)


    浅谈基环树(环套树)

    本篇随笔简单讲解一下算法竞赛中的基环树。也叫环套树。


    一、基环树概念

    其实我个人更喜欢叫它基环树。更好理解。

    它的标准定义是:具有N个点N条边的连通图。

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

    上张图直观理解一下。

    这就是一棵基环树。

    如果我们把中间那个醒目的环断开任意一条边,它就会成为一棵树,如果我们把这个环全部断掉,就会成为一个森林。


    二、内向树和外向树

    啥?树还会害羞么?

    所谓内向树的定义是每个点有且只有一条出边。也就是这棵树给人的大体感觉是向内的。

    所谓外向树的定义是每个点有且只有一条入边。也就是这棵树给人的大题感觉是外向的。

    比如上面的基环树,变成内向树就是:

    变成外向树就是:

    嗯,也就是基环树变成有向图的一种子定义。


    三、基环树的处理

    根据上面的定义介绍,我们可以感觉到,基环树虽然被单独拿出来讨论,但是其本质上还是一个比较简单且好理解的数据结构之一。所以它只能适当地提升题目难度,并不能说一个树的题变成基环树就大大增强了。

    一些经典例题有:

    基环树直径、基环树两点之间距离,基环树DP,等。

    这些模型的解决通法一般是:

    断环成树,然后将若干棵树处理好之后,再考虑环对答案的影响。也就是将环、树分开讨论解决问题。这时,用”环套树“这个名词来形容基环树,很是容易理解。

    比如例题:

    ZJOI2008骑士

    这道题是基环树DP的题目,在这道题中,我们对每一棵基环树断掉环上的一条边,然后对断开的两个点分别跑树形DP,就可以得到正确的答案。

    总的来说,基环树的一种常用处理方式是”断环“。

    再比如例题:

    IOI2008岛屿

    这道题要求基环树的最长链。

    基环树的最长链有两种情况:

    第一种是在某棵树里,不经过环。

    第二种是经过环。

    所以我们可以先用一次DFS找出环,在每个环上节点出发处理树上的最长路径,并计算出从根节点最远到达节点距离根节点的距离。显然,如果经过环的话,肯定要经过这个最大的距离。

    所以比较即可。

    总的来说,基环树的另一种常用处理方式是分类讨论。

  • 相关阅读:
    ubuntu的apt
    sudo命令
    MySQL导出数据到csv文件
    MySQL导出数据到文件报错
    git_backup.py gitlab项目备份
    java中图像与数组转换
    mongodb转elasticsearch
    impyla-0.14.2.2安装注意事项
    python3.7.3升级 with-openssl openssl-1.0.2a
    hadoop自带性能测试
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13815549.html
Copyright © 2020-2023  润新知