关于基环树的一切

这篇具有很好参考价值的文章主要介绍了关于基环树的一切。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

观前须知

笔者的博客主页

声明

本文使用 CC BY-NC-SA 4.0 许可

本文为笔者在 OI 学习中的复习向学习笔记。
部分内容会比较简略。
如有好的习题会不断补充。

知识简介

定义

基环树是一个有 \(n\) 个点 \(n\) 条边的连通图。
因为\(n\) 个点 \(n-1\) 条边。
所以基环树可以看作是加了一条边的树。
那么也就是加了个环的树
注意:题目中给 \(n\)\(n\) 边时可能是基环树,也可能是基环树森林。
后一种情况分连通分量分别做即可。

如图:

拓扑排序找环

无向图:
不断地删除 1 度点,直到留下的全部都是 2 度点,即为环。

有向图:
同上,只不过每次删入度为 0 的点。

DFS找环

无向图:
走的时候记 dfn 和 fa,
遇到遍历过且 dfn 大的点(防止重复计算),
就不断跳 fa 并记录。

代码:

void Dfs(int u) {
    dfn[u] = ++Time;
    for (int i = head[u]; i; i = e[i].nxt) {
        int v = e[i].v;
        if (v == fa[u]) continue;
        if (!dfn[v]) { fa[v] = u, Dfs(v); }
        else {
            if (dfn[v] < dfn[u]) continue;
            loop[++cnt] = v;
            while (v != u) loop[++cnt] = v = fa[v];
        }
    }
}

有向图:
如果边指向叶子可以反过来。
边指向根的树只需要不断向上跳 fa,同时打标记,
直到跳到树的根后,再跳到的点已经打过标记了,那么就找到环了。
(如果要树型DP的话可以再建个反向图,就不用建双向图了)

代码:

while (!vis[x]) vis[x] = true, x = fa[x];
int v = x;
while (v != x) loop[++cnt] = v = fa[v];

基环树常见问题处理方式

把环断开,发现图变成了若干个森林
那么可以把基环树看作用一个环连接着的若干棵树。
这时候就可以先断环,然后再树型DP了。
特别地,有些题涉及到树之间经过环的转移。
这类问题可以分类讨论成不经过环的和经过环的分别处理。
由于有环的出现,破环为链也比较常用。

习题

Luogu P2607 【ZJOI2008】 骑士

首先这个东西显然可以树型DP做。
但是这里是个基环树森林。
发现对于环的任意两个相邻点只能二选一或都不选。
那么任取环上的两个点分别做树型dp取 \(\max(f_{u_1,0},f_{u_2,0})\),然后对每个基环树求和即可。文章来源地址https://www.toymoban.com/news/detail-844408.html

到了这里,关于关于基环树的一切的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于堆的一切

    首先给出堆的定义: 堆是一颗树,满足堆的性质,即: 对于一个节点,它的权值大于(或小于)它的各个儿子的权值 有这个性质,显然 堆的根节点权值是整个堆中最大或最小的 由此可分为 小根堆 和 大根堆 最常见的堆就是二叉堆 二叉堆是一颗满足 堆的性质 的 完全二叉树

    2024年03月13日
    浏览(36)
  • 关于web3营销的一切知识

    Web3 时而神秘代表未来、有时又充满黑暗与欺骗。因为 Web3 与科技和金融紧密相关,而这两者又代表着当今世界的方向与人性。有很多人在说,Web3 就是数据的归属权转移,而我认为除此之外,Web3 更是社会里众多组织架构、利益关系、资源配置等等的重构。在目前常见的 cr

    2024年02月08日
    浏览(45)
  • 【算法】关于排序你应该知道的一切(上)

    和光同尘_我的个人主页 单程孤舟,出云入霞,如歌如吟。 --门孔 国庆快乐!!本来想把排序都做到一起的,才写了一半就八千多字了,那就分开发吧,一如既往的详细哦⌨️ 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来

    2024年02月06日
    浏览(36)
  • 【算法】关于排序你应该知道的一切(下)

    和光同尘_我的个人主页 单程孤舟,出云入霞,如歌如吟。 --门孔 啊还是国庆快乐!上节介绍了较为简单的插入排序、选择排序,今天我们上强度,学习交换排序、归并排序还有计数排序,开冲😎 2.1.1. 基本思想 关于冒泡排序我们在C语言的学习中就有涉及 依次比较序列中相

    2024年02月07日
    浏览(45)
  • 【数据结构】关于排序你应该知道的一切(下)

    和光同尘_我的个人主页 单程孤舟,出云入霞,如歌如吟。 --门孔 啊还是国庆快乐!上节介绍了较为简单的插入排序、选择排序,今天我们上强度,学习交换排序、归并排序还有计数排序,开冲😎 2.1.1. 基本思想 关于冒泡排序我们在C语言的学习中就有涉及 依次比较序列中相

    2024年02月05日
    浏览(38)
  • 我们所知道的关于 OpenAI 的 ChatGPT 的一切

    如果您还没有听说过ChatGPT,这是来自人工智能实验室 OpenAI 的不可思议的新聊天机器人,这里是您需要了解的有关这个有争议的新程序的所有信息的快速入门。 ChatGPT 是一种人工智能工具,允许用户生成原始文本。你可以问它问题,给它创造性的提示,并用它来生成一大堆不

    2023年04月13日
    浏览(42)
  • MacOS Sonoma 指南:关于 macOS 14 你需要知道的一切

    macOS Sonoma(以前称为 macOS 10.12 Sierra)是苹果公司开发的操作系统。它是 macOS 的第十三个主要版本。此 macOS 版本引入了许多新功能,包括 Siri 集成、通用剪贴板、iCloud 驱动器同步、画中画视频播放、选项卡式应用程序、Apple Pay 与 Safari 的集成、Apple Music 和地图更新等。macOS

    2024年02月07日
    浏览(51)
  • python安装三方库教程:关于pip命令的一切,到底怎么用?

      看这篇文章的目录,大家会发现写的很详细,适合收藏哦。如果你是刚学python的小白也没关系!看完这篇文章,关于pip的一切你就懂了。   关于pip的命令需要使用命令行,那么打开命令行界面: win+s/win+r快捷键都行,然后输入cmd后回车就能调出命令行界面了   python以

    2023年04月27日
    浏览(38)
  • Elasticsearch:关于在 Python 中使用 Elasticsearch 你需要知道的一切 - 8.x

    在本文中,我们将讨论如何在 Python 中使用 Elasticsearch。 如果你还不了解 Elasticsearch,可以阅读这篇文章 “Elasticsearch 简介” 进行快速介绍。在我之前的文章 “Elasticsearch:使用最新的 Python client 8.0 来创建索引并搜索”,我也有所介绍如何使用 Python 客户端来连接 Elasticsearch

    2024年02月02日
    浏览(30)
  • 关于Gitee上传代码以后主页没有显示贡献度(没有显示小绿块)

    当我首次发现这个问题的时候,我毫无波澜的认为是Gitee出现了BUG。因为我的这些空白天数里都是有提交的,怎么会没有贡献呢?肯定只是没有显示而已。 可以看到,我这些天都是有贡献的,那为什么没有显示呢? 抱着科学又严谨的心态,我决定一探究竟。首先就在常用的网

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包