基环树
只有两种情况:
1.图连通的话 存在唯一环。
2.不连通 可能存在多个环。
无向图dfs求环,不能建双向边。
有向图 dfs求环,且可以求环的长度,(拓扑后单向边)且长度为2的环:
void dfs(int u,int d){
vis[u]=1,dep[u]=d;
for(int i=h[u];i;i=e[i].nt){
int v=e[i].to;
if(!vis[v]) dfs(v,d+1);
else if(vis[v]==1) b[++id]=dep[u]-dep[v]+1;
原创
2021-08-10 09:26:30
166阅读
基环树: 定义: 基环树,又叫环套树,最显著的特点就是有 \(n\) 个点 \(n\) 条边,导致这个图上出现了一个唯一的环,就像这样: 当然,如果保证这 \(n\) 个点 \(n\) 条边构成的是一个连通图时才是唯一环,如果图不连通但是每个联通块点数都等于边数时,这个图就是一个基环树森林。可以有好 ...
转载
2021-11-03 19:56:00
1317阅读
2评论
基环树只有两种情况:1.图连通的话 存在唯一环。2.不连通 可能存在多个环。无向图dfs求环,不能建双向边。有向图 dfs求环,且可以求环的长度,(拓扑后单向边)且长度为2的环:void dfs(int u,int d){ vis[u]=1,dep[u]=d; for(int i=h[u];i;i=e[i].nt){ int v=e[i].to; if(!vis[v]) dfs(v,d+1); else if(vis[v]==1) b[++id]=dep[u]-dep[v]+1;
原创
2022-01-21 09:52:32
233阅读
树: 基环树: 就是比平常的树多了一条边。。构成了一个环 做法就是 dfs去找环 然后删掉环上的任意一条边,记下u和v 分别以u 和 v 为祖结点 进行树形dp 分别求出不要u 和 不要v的值 取大的 即可 一般这种题都是 对于一个对象 有两种选择 而只能选择一个 有的对象之间的选择会冲突 模板题:
转载
2018-09-04 22:40:00
57阅读
2评论
void getcircle(int x,int y) { while(x!=y) { circle[++tot]=x; x=st[--tp]; } circle[++tot]=y; } void dfs(int x,int lastedge) { mark[x]=1; if(!flag) st[+ ...
转载
2021-09-17 19:34:00
233阅读
2评论
浅谈基环树(环套树) 本篇随笔简单讲解一下算法竞赛中的基环树。也叫环套树。 一、基环树概念 其实我个人更喜欢叫它基环树。更好理解。 它的标准定义是:具有N个点N条边的连通图。 如果不保证联通,它就会成为基环树森林。 上张图直观理解一下。 这就是一棵基环树。 如果我们把中间那个醒目的环断开任意一条边,
转载
2020-10-14 16:22:00
981阅读
2评论
(有向图)基DP:https://ac.nowcoder.com/acm/contest/140/B (无向图):bzoj3242 ,最小化最远距离。 (无向图):bzoj1791,求基环树直径。 (无向图):bzoj1040,基环树最大独立基。 #include<bits/stdc++.h> #d
转载
2019-09-05 17:39:00
118阅读
2评论
如果你像本节的标题一样,恭喜你成功学会了这个东西洗洗睡吧 珍爱生命,建议远离 基本 基环树是一种图结构,直观表现为树套环 狭义的基环树指树上两个点之间多一条边,整个图中有且仅有一个环 广义上指边数和点数相同的图,即一个基环树森林 特别的,对于有向图,每个点有且仅一条出边的为内向树,有且仅有一条入边的 ...
转载
2021-10-15 06:40:00
148阅读
2评论
基环树复习0.定义基环树,又称环套树,有nnn个点nnn条边,比树多一条边。当nnn点nnn边是一个连通图是拥有唯一环,如下图。否则当图不连通但是每个连通块点数等于边数时为基环树森林。2.习题CF711D. Directed Roads给定nnn点nnn边,可改变边方向,有多少种无环方案。找到所有环。答案就是:2n−tot×∏i=1cnt(2sizei−2)\large 2^{n-tot}\times \prod\limits_{i=1}^{cnt}(2^{size_i}-2)2
原创
2022-01-20 16:05:31
52阅读
基环树复习
0.定义
基环树,又称环套树,有nnn个点nnn条边,比树多一条边。
当nnn点nnn边是一个连通图是拥有唯一环,如下图。
否则当图不连通但是每个连通块点数等于边数时为基环树森林。
2.习题
CF711D. Directed Roads
给定nnn点nnn边,可改变边方向,有多少种无环方案。
找到所有环。
答案就是:2n−tot×∏i=1cnt(2sizei−2)\large 2^{n-tot}\times \prod\limits_{i=1}^{cnt}(2^{size_i}-2)2
原创
2021-08-10 09:13:44
78阅读
[总结] 基环树 基环树 \(\in\) \(NOIP\) 考纲 概念类 基环树的def 与普通树类似,仅仅看上去形态多了一个环(可以理解为树加了一条边),所以叫基环树。 基环树的顶点数和边数相等。 类似这样:( \(copy\) 的 ) 还有这样:(外向树) 、 当然还有这样:(内向树) 基环树直 ...
转载
2021-08-12 17:23:00
242阅读
2评论
void tarjan(int x,int from){ dfn[x] = ++sz; for (int i = head[x]; ~i; i = fail[i]) { if (i == (from ^ 1)) continue; int v = edge[i]; if (dfn[v]) { if ...
转载
2021-09-11 19:21:00
311阅读
2评论
概念 具有$N$个点$N$条边的连通图,如果图不是连通的,就会变成基环树森林 除此之外,还有内向树:每个点有且只有一条出边,外向树:每个点有且只有一条入边 典型套路 一般有:基环树直径,基环树两点间的距离,基环数DP等类型的题目 一般做法用: 断环 把环和剩下的边分开处理 例题 P1453 城市环路 ...
转载
2021-10-29 10:42:00
119阅读
2评论
破环为树 $\text{[ZJOI 2008] }$骑士 解法 题目实际上是求基环树上的最大点独立集的问题。对于一棵基环树,它的所有独立集方案数必然可以被边 \((u,v)\) 划分 —— 选择了 \(u\) 或选择了 \(v\)。这也是 "破环为树" 的基础。 于是可以随便选一条环上的边 \((u ...
转载
2021-09-06 16:12:00
79阅读
2评论
基环树dp遇到好几次都没做出来qaq一定要练一波。。
这个题先断环上一边。。然后是个入门树dp。。
原创
2022-08-31 17:56:20
39阅读
题目链接:https://darkbzoj.cf/problem/1791解题思路:如果题目给的是一棵树,那么就跟简单了,直接
原创
2023-05-31 09:40:37
70阅读
然后环上的情况。。。首先处理一下外向树的情况。。跑一遍dfs可以解决。。顺便处理最大深度。。。
然后是最远路径经过环的情况。。逐点对求实在是非常麻烦,考虑的情况很多。。
这需要特殊的姿势(就是题解)。。
考虑已经确定了答案点,那么这个点延伸出去能得到一棵最短路路径树。。显然这棵最短路径树必将不会经过环上的一条边,因此,可以枚举环...
原创
2022-08-31 18:26:05
91阅读
又被卡常。。MLE1个点老是
原创
2022-08-31 18:33:21
70阅读
基环树的千层套路 基环树就是一棵树上多了一条边,因而形成了一个环。 因为其特殊的性质,很多情况下可以去掉环当成一棵树考虑。 大部分的基环树上的问题,随意删去环上的一条边,仍然可以得到一个可行解,因此最暴力的做法就是把所有边都删掉,对得到的每一棵树找一组最优解,再在找到的所有解中找出最优的。 Luog ...
转载
2021-09-08 22:03:00
97阅读
2评论
写的大多只是思路,比较简单的细节和证明过程就不放了,有需者自取。 基环树简介 简单说一说基环树吧。由名字扩展可得这是一类以环为基础的树(当然显然它不是树。 通常的表现形式是一棵树再加一条非树边,把图画出来是一种向外发散的有趣图案。 体现在【题目条件】上就是一个 \(n\) 个点 \(n\) 条边的连 ...
转载
2021-09-09 21:33:00
51阅读
点赞