tarjan双连通
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
圆方树学习笔记(+例题详解)
做点双连通的时候发现很多题目可以用圆方树写特意去学了一下,入门很简单嘛,而且是个很神奇的东西!!前置知识:点双连通分量,没了\color{Red}前置知识:点双连通分量,没了前置知识:点双连通分量,没了圆方树大概就是把一般图变成树的结构,然后我们就可以在上面大概就是把一般图变成树的结构,然后我们就可以在上面大概就是把一般图变成树的结构,然后我们就可以在上面乱搞了比如给定一张无向图,怎么把它转化为树?比如给定一张无向图,怎么把它转化为树?比如给定一张无向图,怎么把它转化为树?大概做法是:求出所有点原创 2020-09-03 00:02:56 · 574 阅读 · 3 评论 -
P5058 【[ZJOI2004]嗅探器】(dfn数组判断割点关键点)
如果这个点是割点且删去后,aaa和bbb在不同的连通块就可行现在问题关键就是如何判断这个割点是否把aaa,bbb隔开来了那么现在我们从aaa点开始tarjantarjantarjan想象一下vvv是uuu的儿子,如果dfn[u]<=low[v]dfn[u]<=low[v]dfn[u]<=low[v]说明uuu是割点删掉uuu后,aaa和vvv必定隔开来那如果bbb在vvv的一侧,不就说明aaa和vvv隔开了吗?那bbb在vvv的一侧不就说明dfn[b]>=dfn[v]df原创 2020-09-02 21:37:07 · 263 阅读 · 0 评论 -
点双连通分量[模板]
#include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;int n,m,cut[maxn];struct edge{ int to,nxt;}d[maxn]; int head[maxn],cnt=1;void add(int u,int v){ d[++cnt]=(edge){v,head[u]},head[u]=cnt;}int low[maxn],dfn[maxn],stac[maxn],top原创 2020-08-24 09:36:35 · 509 阅读 · 4 评论 -
P3225 [HNOI2012]矿场搭建(组合思维+点双连通)
可以说是很好的一道点双连通例题了首先考虑对于一个非割点,删去后图分成若干个连通块首先考虑对于一个非割点,删去后图分成若干个连通块首先考虑对于一个非割点,删去后图分成若干个连通块那我们暂时把所有割点删掉,这样分成了若干个连通块此时如果在每个连通块建造一个逃生口肯定是符合要求的,但不是最小的此时如果在每个连通块建造一个逃生口肯定是符合要求的,但不是最小的此时如果在每个连通块建造一个逃生口肯定是符合要求的,但不是最小的为什么肯定符合要求呢?因为如果坍塌的点是割点,由于每个连通块都有逃生,所以可行因为如果原创 2020-09-02 20:04:29 · 212 阅读 · 0 评论 -
P3469 [POI2008]BLO-Blockade(割点+搜索树性质)
其实很容易看出来和割点有关其实很容易看出来和割点有关其实很容易看出来和割点有关如果某个点不是割点,去掉之后答案就是2(n−1)如果某个点不是割点,去掉之后答案就是2(n-1)如果某个点不是割点,去掉之后答案就是2(n−1)如果某个点是割点,去掉之后会分成x割连通块,记作a1,a1,...ax如果某个点是割点,去掉之后会分成x割连通块,记作a_1,a_1,...a_x如果某个点是割点,去掉之后会分成x割连通块,记作a1,a1,...ax对于a1来说,到不了的点有(n−a1),所以对答案贡献是a1∗原创 2020-09-02 17:03:54 · 230 阅读 · 0 评论