图论复习——dfs树,点双,边双,强连通分量

知识点

dfs树

对一个图运行 dfs 算法,每个点uuu的父亲定义为第一次遍历uuu时的前驱结点,若无则为根。
无向图的 dfs树 没有横叉边。
有向图的 dfs树 横叉边方向唯一,总是从后访问的点指向先访问的点。
dfs树详解

tarjan

点双

定义:

不存在割点的图。

性质:

在这里插入图片描述
两点一线型点双,较为特殊,以下在讨论特定性质时可能不纳入考虑范围。

  1. 点双的dfs树上,根只有一个儿子,除叶子和根外每个点都有回边跨过。
    在这里插入图片描述
  2. 表述1:点双(两点一线型除外)中任意两点至少包含在一个简单环内。
    表述2:点双(两点一线型除外)中任意两点间都存在至少两条简单路径,并且这两条路径不经过相同的点。
    表述3:点双(两点一线型除外)中任意两条边至少包含在一个简单环内。
  3. 对于点双中任意两点u,vu,vu,v,若点ppp在点双中,则一定存在u−p−vu-p-vupv的简单路径;若点ppp不在点双中,则一定不存在u−p−vu-p-vupv的简单路径。
    (对于点双中的任意一对点,连接它们的简单路径所经过点的并集一定就是这个点双本身。)
  4. 对于点双中任意两点u,vu,vu,v,若边ppp在点双中,则一定存在u−p−vu-p-vupv的简单路径。
  5. 若点双中有奇环,由3.4.得任意两点间的简单路径有偶数长度和奇数长度的,所以点双里的所有边和点都在奇环上。
  6. 一个有割点的无向图可以由若干个点双组成,点双间以割点相连接,两相邻的点双之间的公共点一定是唯一的,且一定是割点。
  7. 无向图中的每个割点至少属于两个点双,其余点和每条边都只属于一个点双。
  8. 点双连通分量一定是边双连通分量(两点一线型除外),反之不一定。

圆方树

圆方树是根据点双把无向图缩点所形成的树。
我们把每一个点双缩成一个 “方点”,把原有的点称作 “圆点”。然后我们把原图的边全部删除,让每个点向其所属的点双的 “方点” 连边。
显然,一个割点会向多个方点连边,而由此,除了根节点以外,所有的非割点都是叶子节点。 我们也知道,圆点和圆点之间不会互相连边,方点和方点之间也不会互相连边。
在这里插入图片描述
(第一个是原图,第三个是原图对应的圆方树)

应用:

  • 处理有关简单路径的问题
  • 处理有关图的连通性的问题
  • %%%大佬的Blog

边双

定义:

不存在桥的图。

性质:

  1. 边双的dfs树上,每条树边都有回边跨过。 在这里插入图片描述
  2. 表述1:边双中任意一条边都包含在至少一个简单环中。
    表述2:边双中任意两点间都存在至少两条简单路径,并且这两条路径不经过相同的边。
  3. 不是点双的边双可以由点双组成。
    在这里插入图片描述
    (由两个点双组成的边双)
  4. 在一个有割边的无向图中,把每一个边双缩成一个点,然后这些点之间由原来的割边相连形成了一棵树。
  5. 无向图中两点一线型点双的边其实就是割边,割边不属于任何边双,而其它非割边的边都属于且仅属于一个边双。

小小总结:

点双和边双都是 由一些简单环组成的无向连通图,
不严谨地说,点双是"边的集合",边双是"点的集合"。
图上的简单路径问题,一般用圆方树(点双)解决。

强连通分量

定义:

若有向图GGG满足:图中任意两点u,vu,vu,v间都存在从uuuvvv的有向路径和从vvvuuu的有向路径,则称GGG是一个强连通图。有向图的极大强连通子图,称为强连通分量

性质:

  1. 在强连通图中,每个点的入度和出度一定都不为0。
  2. 把有向图中的每个强连通分量缩成一个点,将得到一个DAGDAGDAG(有向无环图)。

Kosaraju 算法

SAT & 2-SAT

入门讲解
入门讲解

题目

POJ2942 Knights of the Round Table

题意:判断每个点是否能在奇环内。

题解:若点在一个奇环内,则这个环一定在点所在的点双内,而点双中只要存在一个奇环,点双中的所有点都可以在奇环上。奇环的判断:二分图染色后,只要有一个点和它的相邻节点的颜色相同,就找到了奇环。

Code

AGC038D Unique Path

在这里插入图片描述
%%%zjr学长
在这里插入图片描述
摘自此Blog

XSY3273 graph

题意:有一个无向图,它没有重边和自环。现在有一些询问,形如“u,vu,vu,v之间是否存在一条长度为奇数的简单路径?” 这里简单路径定义为不经过重复的点的路径。

题解:首先建出dfs树,然后判断u,vu,vu,v间的树上路径长度是否为奇数
不是奇数的话考虑原图的圆方树,因为任意两点间的简单路径都可以拆分成经过的点双,所以就有以下结论:
对于树上距离为偶数的u,vu,vu,v,它们之间存在长度为奇数的简单路径当且仅当它们的树上路径经过了至少一条在奇环上的边
所以只需要求树上路径是否经过这样的边,每找到一个奇环,这个奇环所在的点双所包含的边都是满足要求的边,tarjan预处理即可

Code

HDU2767 Proving Equivalences

在这里插入图片描述
如果这个图本身就是强连通的,不用加任何边。
否则把每个强连通分量缩成一个点,得到一个DAGDAGDAG。记in[i]in[i]in[i]为点iii的入度,out[i]out[i]out[i]为点iii的出度,那么DAGDAGDAG上的点可以分为以下四类:

  1. in[i]>0,out[i]>0in[i]>0,out[i]>0in[i]>0,out[i]>0
  2. in[i]=0,out[i]>0in[i]=0,out[i]>0in[i]=0,out[i]>0
  3. in[i]>0,out[i]=0in[i]>0,out[i]=0in[i]>0,out[i]=0
  4. in[i]=0,out[i]=0in[i]=0,out[i]=0in[i]=0,out[i]=0

贪心策略:第3类点向第2,4类点连边,第4类点再向第2类点连边
所以令DAGDAGDAG变为强连通,加的最少边数为max(入度为0的点数,出度为0的点数)max(入度为0的点数,出度为0的点数)max(0,0)

POJ3177 Redundant Paths G

在这里插入图片描述
题解:
把边双缩成点。
tarjantarjantarjan缩点后图变成树,首先特判树中点数n≤2n\leq 2n2的情况。
考虑n>2n>2n>2的情况,答案为⌊cntleaf+12⌋\lfloor\frac{cnt_{leaf}+1}{2}\rfloor2cntleaf+1
构造具体方案时,以任意度大于111的点为根,只需要保证任意两个叶子连边后与根成环,
当奇数个叶子时,可以将一个叶子与根相连,又转换成了偶数叶子情况。

具体构造:
tarjantarjantarjan缩点后图变成树,选择度数大于111的点为根,按照dfsdfsdfs序存下所有叶子,leaf[i]leaf[i]leaf[i]表示按dfsdfsdfs序排序后的第iii个叶子,共ggg个叶子。
leaf[i]leaf[i]leaf[i]leaf[i+⌊g2⌋]leaf[i+\lfloor\frac{g}{2}\rfloor]leaf[i+2g]连边,(i≤⌊g+12⌋i\leq \lfloor\frac{g+1}{2}\rfloori2g+1)。

构造方法证明:
见2020牛客多校第三场C
在这里插入图片描述

CF1000E We Need More Bosses

在这里插入图片描述
“必须经过的边”就是sssttt路径上的割边,把无向图中的边双缩成点,得到一棵树,求树的直径即可。

Code

CF1137C Museums Tour

在这里插入图片描述
d≤50d\leq 50d50
在这里插入图片描述
摘自此Blog

Code

CF1220E Tourism

在这里插入图片描述

在边双内走,一定能回到原点,故把边双缩成点。

然后就是树形DP:
f[cur]f[cur]f[cur]代表走到curcurcur子树还能回的贡献,g[cur]g[cur]g[cur]代表走到curcurcur子树回不来的贡献,题目所求即为g[s]g[s]g[s]

先考虑fff的转移, 如果子节点能回来:f[cur]+=f[to]f[cur]+=f[to]f[cur]+=f[to]
然后g[cur]=max(g[to])+f[cur]g[cur] = max(g[to]) + f[cur]g[cur]=max(g[to])+f[cur](走完所有可以返回的儿子再找个最大的不能返回的)

这样有一个问题,如果f[cur]<g[cur]f[cur]<g[cur]f[cur]<g[cur],结点curcurcur是否要返回
于是再:g[cur]=max(g[cur],f[cur]−f[to]+g[to])g[cur] = max(g[cur], f[cur] - f[to] + g[to])g[cur]=max(g[cur],f[cur]f[to]+g[to])
摘自此Blog

Code

CF732F Tourist Reform

在这里插入图片描述
Blog

Code

POJ3694 Network

题意:在线查询一个无向图加入一条边后减少了多少条桥。
题解:先将所有的边双缩点,得到一颗树。初始时桥数即为树的边数,树边边权皆为1。
每次询问加入边(x,y)(x,y)(x,y),设c[i]c[i]c[i]表示点iii所在边双。
c[x]==c[y]c[x]==c[y]c[x]==c[y],无影响。
否则,减去的桥数为树上c[x]c[x]c[x]c[y]c[y]c[y]的路径上边权的和,然后把该路径上树边的边权全部改为0。

[HNOI2012]矿场搭建

在这里插入图片描述
每个点双内设一个救援出口
摘自此Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 网络状态判断

1、获取网络信息&#xff0c;首先需要获取权限 <uses-permission android:name"android.permission.INTERNET" /> <uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" /> 2.1我们通过ConnectivityManager可以获取状态…

【点分治】Tree(luogu 4178/金牌导航 点分治-1)

Tree luogu 4178 金牌导航 点分治-1 题目大意 给出一棵树&#xff0c;问你书中路径长度小于等于k的点对个数有多少个 输入样例 5 1 2 3 1 3 1 1 4 2 3 5 1 4输出样例 8数据范围 1⩽N⩽41041\leqslant N \leqslant 4\times 10^41⩽N⩽4104 解题思路 对于该树&#xff0…

均分纸牌问题

均分纸牌有三种情况&#xff1a;线性&#xff0c;环形&#xff0c;二维 文章目录线性题目描述思路&#xff1a;代码&#xff1a;环形题目描述思路代码线性 题目描述 P1031 均分纸牌 有N堆纸牌&#xff0c;编号分别为1,2,…,N。每堆上有若干张&#xff0c;但纸牌总数必为N的倍…

.net core实践系列之短信服务-Api的SDK的实现与测试

前言上一篇《.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现》讲解了API的设计与实现&#xff0c;本篇主要讲解编写接口的SDK编写还有API的测试。或许有些人会认为&#xff0c;SDK的编写可以不需要&#xff0c;既然已经用了RESTful web服务与Swagger提供的接口描述&…

[集训队作业2018] count(笛卡尔树,生成函数,卡特兰数)

传送门 什么情况下两序列同构 对于两序列A[1,n],B[1,n]A[1,n],B[1,n]A[1,n],B[1,n]&#xff0c;设fA(1,n)pa,fB(1,n)pbf_A(1,n)p_a,f_B(1,n)p_bfA​(1,n)pa​,fB​(1,n)pb​&#xff0c; 若pa̸pbp_a\notp_bpa​​pb​&#xff0c;A,BA,BA,B一定不同构。若papbp_ap_bpa​p…

【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201)

梦幻布丁 金牌导航 启发式合并-1 luogu 3201 题目大意 有若干个布丁&#xff0c;给出它们的颜色&#xff0c;每次将一个颜色的所有布丁变成另一种颜色&#xff0c;然后询问有多少段连续的数 输入样例 4 3 1 2 2 1 2 1 2 1 2输出样例 3 1样例解释 初始时布丁颜色依次为 …

P4717-[模板]快速莫比乌斯/沃尔什变换(FMT/FWT)

正题 题目链接:https://www.luogu.com.cn/problem/P4717 题目大意 给出两个长度为2n2^n2n的数列A,BA,BA,B求 Cn∑iorjnAiBjC_{n}\sum_{i\ or\ jn}A_iB_jCn​i or jn∑​Ai​Bj​ Cn∑iandjnAiBjC_{n}\sum_{i\ and\ jn}A_iB_jCn​i and jn∑​Ai​Bj​ Cn∑ixorjnAiBjC_{n}\su…

P4016 负载平衡问题

文章目录题目描述题解&#xff1a;方法一&#xff1a;代码&#xff1a;方法二&#xff1a;P4016 负载平衡问题题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库&#xff0c;每个仓库存储的货物数量不等。如何用最少搬运量可以使 n 个仓库的库存数量相同。搬运货物时&#xff…

Ocelot简易教程(二)之快速开始2

为什么这篇的标题叫“Ocelot简易教程&#xff08;二&#xff09;之快速开始2”呢&#xff0c;因为很多朋友跟我说上一篇“ Ocelot简易教程&#xff08;二&#xff09;之快速开始1”内容太少了&#xff0c;只是简单介绍Ocelot的一些简单配置&#xff0c;让Ocelot能跑起来&#x…

【线性基】彩灯(luogu 3857/金牌导航 线性基-1)

彩灯 luogu 3857 金牌导航 线性基-1 题目大意 给若干个01串&#xff0c;让你选择其中一些&#xff0c;问你异或的值有多少种 输入样例 2 3 OO XO OX输出样例 4数据范围 1⩽N,M⩽501\leqslant N,M\leqslant 501⩽N,M⩽50 解题思路 对于原来的01串&#xff0c;先求出其线…

[POI2015] Pustynia(差分约数,线段树优化建图,拓扑)

传送门 Description 给定一个长度为n的正整数序列aaa&#xff0c;每个数都在111到10910^9109范围内&#xff0c;告诉你其中sss个数&#xff0c;并给出mmm条信息&#xff0c;每条信息包含三个数l,r,kl,r,kl,r,k以及接下来kkk个正整数x1,x2,...,xkx_1,x_2,...,x_kx1​,x2​,...…

CF662C-Binary Table【FWT】

正题 题目链接:https://www.luogu.com.cn/problem/CF662C 题目大意 n∗mn*mn∗m的网格上有0/10/10/1&#xff0c;可以任意翻转行和列&#xff0c;求剩下最少的111。 解题思路 知道是FWTFWTFWT之后就好做很多了。 首先因为nnn很小&#xff0c;所以可以考虑枚举翻转的行数&…

【高斯消元】球形空间产生器(luogu 4035/金牌导航 高斯消元-1)

球形空间产生器 luogu 4035 金牌导航 高斯消元-1 题目大意 给出n1个n维的点&#xff0c;让你求一个点&#xff0c;使该点到所有点欧几里得距离相等 输入样例 2 0.0 0.0 -1.0 1.0 1.0 0.0输出样例 0.500 1.500数据范围 1⩽N⩽101\leqslant N \leqslant 101⩽N⩽10 解题思…

.NET的前世今生与将来

笔者注谨以此文纪念我敬重的2016年9月17日去世的 装配脑袋 逝世两周年让大家久等了&#xff0c;前后花了1年的时间&#xff0c;几经改版&#xff0c;终于完成撰写了一万字长文&#xff0c;回顾和展望.NET这16年来的成功与失败。最终能成文是因为我给自己承诺必须赶在 装配脑袋 …

P4011 孤岛营救问题

P4011 孤岛营救问题 文章目录输入输出样例题意&#xff1a;题解&#xff1a;代码&#xff1a;输入输出样例 输入 4 4 9 9 1 2 1 3 2 1 2 2 2 0 2 1 2 2 0 2 1 3 1 0 2 3 3 3 0 2 4 3 4 1 3 2 3 3 0 3 3 4 3 0 4 3 4 4 0 2 2 1 2 4 2 1输出 14题意&#xff1a; (原题太长我就…

[NOI2014] 起床困难综合症(二进制,贪心)

#include<bits/stdc.h> int n,m,ans,x,a10,a2-1; //-1的补码:11111111111... char str[5]; int main(){scanf("%d%d",&n,&m);while(n--){scanf("%s%d",str,&x);if(str[0]A) a1&x, a2&x;if(str[0]X) a1^x, a2^x;if(str[0]O) a1|…

CF1119H-Triple【FWT】

正题 题目链接:https://www.luogu.com.cn/problem/CF1119H 题目大意 nnn个可重集&#xff0c;第iii个里有xxx个aia_iai​&#xff0c;yyy个bib_ibi​&#xff0c;zzz个cic_ici​。 对于每个t∈[0,2k)t\in[0,2^k)t∈[0,2k)求每个集合里取出一个数使它们异或起来等于ttt的方案数…

【数学】整数个数(金牌导航 欧拉函数-1)

整数个数 金牌导航 欧拉函数-1 题目大意 问1~n-1中满足x∤\nmid∤n且不与n互质的数有多少个 输入样例 10输出样例 3样例解释 3个数分别是4,6,8 数据范围 0⩽n⩽2310\leqslant n\leqslant 2^{31}0⩽n⩽231 解题思路 因为互质和整除的子集是独立的&#xff08;1除外&am…

P4015 运输问题

P4015 运输问题 文章目录题目描述&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 两行分别输出最小运输费用和最大运输费用。 输入输出样例…

NetCore使用Jwtbearer给WebAPI添加访问控制

现在JWT代替session来做访问控制已经成为大部分webapi的做法&#xff0c;今天我们也来尝试一下WebAPI使用NetCore2.1创建,无身份认证信息nuget安装包IdentityModel 选择稳定版3.9.0Microsoft.AspNetCore.Authorization 版本2.1.1Microsoft.AspNetCore.Authentication.JwtBearer…