首页 > TAG信息列表 > 点双
圆方树(tarjan点双联通分量)
板子 int low[N],dfn[N],stk[N],tp,dfn_cnt; void tarjan(int u,int fa) { dfn[u]=low[u]=++dfn_cnt; for(rint i=head[u];i;i=e[i].nxt) { int v=e[i].to; if(v==fa)continue; if(!dfn[to]) { tarjan(v,u);P8435 【模板】点双连通分量
【模板】点双连通分量 题目描述 对于一个 \(n\) 个节点 \(m\) 条无向边的图,请输出其点双连通分量的个数,并且输出每个点双连通分量。 输入格式 第一行,两个整数 \(n\) 和 \(m\)。 接下来 \(m\) 行,每行两个整数 \(u, v\),表示一条无向边。 输出格式 第一行一个整数 \(x\) 表示点双连通双连通分量
点双连通分量 在一个连通图中(无向图)任选两点,如果他们之间至少存在两条“点不重复”的路径,称这个图为点双连通。一个图中的点双连通极大子图称为“点双连通分量”(block,2-connected component,BCC)。点双连通分量是个“可靠”的图,去掉任意一个点,其他点任然是连通的。也就是说,点双【模板】【luogu P4630】Duathlon 铁人两项(圆方树)
Duathlon 铁人两项 题目链接:luogu P4630 题目大意 给你一个无向图,然后你可以按顺序选三个点 a,b,c,保证 a 可以到 b,b 可以到 c,而且存在方案使得这两个路径的交点只有 b。 然后问你有多少个满足的三元组。 思路 首先如果这个是森林的话那我们可以很好的搞。 (反正各种方法随便你) 那我快速题解to[APIO2018]Duathlon铁人两项 & 圆方树介绍
求不一定连通的简单无向图中,满足「存在一条路径 \(s\to f\) 经过 \(c\) 」的 \(\lang s,c,f\rang\) 的个数。\(\lang s,c,f\rang\) 和 \(\lang f,c,s\rang\) 算不同的元组。 点双的性质:对于一个点双连通分量中的两个点 \(u,v\),从 \(u\) 到 \(v\) 的所有路径的并为点双连通分量的「图论」连通性问题
强连通 若一张有向图的节点两两相互可达,则称这张图是强连通的 强连通分量\((SCC)\):极大的强连通子图 DFS树 对一个图任取一个节点,跑\(DFS\)建出的树 树边:每次搜索找到一个还没有访问过的节点的时候就形成了一条树边 返祖边:也叫回边,指向祖先节点的边 横插边,在搜索时遇到了一个已经[APIO2018] Duathlon 铁人两项
II.[APIO2018] Duathlon 铁人两项 我们考虑对于这样一个三元组\(\left<s,c,f\right>\),假如我们固定了\(s\)和\(f\),\(c\)有多少种可能的取值呢? 显然,\(c\)的取值等于\(s\rightarrow f\)的简单路径的并集的大小减\(2\),因为\(s\)和\(f\)不能作为\(c\)。 那这个并集的大小呢? 我们先假设hdu3749Financial Crisis(点双连通分量)
传送门 题意:如果两个点不在一个连通图中,即无路径相连,输出"zero",如果在同一个连通图中,如果两点路径上必经过割点,输出"one", 其余输出"two or more",点双连通分量(第一次接触,之前都做得有向图缩点) 博客传送门 AC代码: #include <iostream> #include <cstring> #include <al圆方树
圆方树相关知识 我们在做题的时候会发现:很多时候树比图好维护的多 例如求两点间路径长度,链上加法等 而在一些题中,应用圆方树能将图化为一棵树 圆方树最初用来处理仙人掌图,但是我们很多时候也能在一般无向图上使用 首先抛一个很大众的名词:点双连通图 点双连通图就是一个任意两点间【图论】圆方树
一般图,通过点双连通分量建立圆方树,每个点双连通分量建一个方点,方点向原图的点(圆点)连边,圆点之间的边(原图的边)删去。变成一棵树。点双连通分量的缩点
将(1,2,3,4,5)命名为1号连通块将(1,6)命名为2号连通块将(6,7)命名为3号连通块将(6,8,9)命名为4号连通块 将割点1命名为5号将割点6命名为6号 将每个割点与它从前所属于的连通块进行联边,形如下:Tarjan算法与无向图连通性
割边/桥 定义:删去该边后,原图分裂成大于1个联通块 求解:对于边\(x \rightarrow y\),若\(low[y] > dfn[x]\),则\(x \rightarrow y\)是桥 易错:\(dfs\)时,带参数\(faId\),表示进入\(x\)的边。访问\(x\)到达的点时,略过\(faId\) 边双连通分量 定义:没有割边的极大子图 求解:去除所有割边 充要条【POJ2942】Knights of the Round Table(二分图 点双联通分量)
题目链接 大意 给定\(N\)个点与\(M\)个关系,每个关系表示某两个点间没有直接的边相连,求不在所有奇环上的点的个数。 (\(1\le N\le 1e3,1\le M\le 1e6\)) 思路 考虑到\(N\)比较小的缘故,我们不妨暴力连边。 对于现在得到的一个图,我们需要找出所有在奇环上的点。 考虑使用点双联通分量【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)
题干: 有一个仓库被分成n*m 个矩形区域,如果两个区域有一条公共边,则被认为这两个区域相邻。包裹都放在一个区域中,剩余的区域或者空闲或者被集装箱占有,这是因为集装箱太重,仓库管理员不能将集装箱搬走。仓库管理员目是是要将包裹从开始的P区域移动到最后的K区域。他可以从空区域走【POJ - 2942】Knights of the Round Table(点双连通分量,二分图判断奇环奇圈)
题干: Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things to do. Therefore, it is not very surprising that in recent years the kingdom of King Arthur has exbzoj2208 [Jsoi2010] 连通数(tarjan点双连通分量 // dfs)
题干: 题解: 本题也就是 一个有向图,题干中也没有说是否有环,我们就需要tarjan缩一下点(有向图缩点需要判断是否在队中),再进行操作。C++[Tarjan求点双连通分量,割点][HNOI2012]矿场搭建
最近在学图论相关的内容,阅读这篇博客的前提是你已经基本了解了Tarjan求点双。 由割点的定义(删去这个点就可使这个图不连通)我们可以知道,坍塌的挖煤点只有在割点上才会使这个图不连通,而除了割点的其他点上则无可厚非,所以我们只需要考虑这个图的割点的情况。 那么我们就可以求出所有[Cerc2005]Knights of the Round Table
题目描述 有n个骑士经常举行圆桌会议,商讨大事。每次圆桌会议至少有3个骑士参加,且相互憎恨的骑士不能坐在圆桌的相邻位置。如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是大于1的奇数,以防止赞同和反对票一样多。知道那些骑士相互憎恨之后,你的任务是统计有多少骑士不可G - Railway HDU - 3394(点双连通分量)
There are some locations in a park, and some of them are connected by roads. The park manger needs to build some railways along the roads, and he would like to arrange tourist routes to each circuit. If a railway belongs to more than one tourist routes, tP2783 有机化学之神偶尔会做作弊 [点双][树剖]
P2783 有机化学之神偶尔会做作弊 史上最水黑题 做法很暴力:tarjan算法求点双缩点,建新图,跑树剖或倍增,求LCA,通过深度算出答案即可。 点双的做法跟强连通分量的tarjan算法极其相似,唯一的一点不同就在于不能回到父节点。 要是回父节点的话那都有两个点大小的环咯 自己交上去45pts,原来是poj2942 Knights of the Round Table(点双联通分量+lca+并查集)
题 目 传 送 门 在 这 题目大意 有n个骑士,m对憎恨关系,每个憎恨的骑士不会坐在一起。 现在要将尽量多的奇数个人安排到一个圆桌上。 输出最少的没有参加的骑士。 解题思路 我们将没有憎恨关系的两个骑士连一条边,那么题目就是求出最长的奇环,用n