首页 > 其他分享 >连通性+ 1

连通性+ 1

时间:2024-04-09 16:22:38浏览次数:14  
标签:land 连通性 track when back dfn low

早在普及组的时候,我们就学会了:

  • DFS(BFS)搜连通块

  • 并查集在加边的情况下动态维护连通块(支持离线处理删边)

现在,我问你:

  • 我删去一个点/边,判断剩下的图存在原本某两个连通的点现在不连通?

  • 我随机删去一条边,判断剩下的图中某两个点是否一定连通?

  • 我随机给你一些点,判断其中两两是否互相可达(有向图上)?

第三个问题不是今天这篇文章所讲的范畴,但是其他问题确实可以讲一讲。

我删去一个点/边,判断剩下的图存在原本某两个连通的点现在不连通?

形式化定义:有 \(G = (V, E), d \in V\),判断:

\(\exists x, y, x \ne d \land y \ne d \land (\exists v = (v_1, v_2, \cdots, v_k), v_1 = x \land v_k =y \land (\forall 1 \le i < k, (v_i, v_{i + 1}) \in E)) \land (\nexists v = (v_1, v_2, \cdots, v_k), v_1 = x \land v_k =y \land (\forall 1 \le i < k, (v_i, v_{i + 1}) \in E) \land (\forall 1 \le i \le k, v_i \ne d))\),如果成立则称 \(d\) 为割点。

这个问题可以使用 Tarjan 求解。

Tarjan(谐音太监,虽然其正确中文名为塔杨)通过两个数组来求解:\(dfn_i\) 表示 \(i\) 的 DFS 序,\(low_i\) 表示在不经过 \(i\) 在 DFS 树上的父亲所能走到的 \(dfn\) 最小的节点。

如果对于 \(u\) 有一个 \(u\) 的儿子 \(v\) 满足 \(low_v \ge dfn_u\),也就是不能回到祖先,那么就可以确定 \(u\) 是割点了...吗?

根节点的每一个儿子必然满足条件,所以我们要特判:

根是割点当且仅当根在树上有至少两个儿子。

伪代码:

function() Tarjan(x, fa, rt) does
  (int)c(0)
  dfn[x] = low[x] = ++cnt, vis[x] = 1
  for(each i \in adj[x]) does
    when(!vis[i]) then
      c++
      Tarjan(i, x, rt)
      low[x] sets(\min) low[i]
      when(x \ne rt \and low[i] \ge dfn[x]) then
        satis[x] = 1
      back on track
    and when(i \ne fa) then
      low[x] sets(\min) dfn[i]
    back on track
  back on track
  when(x \eq rt \and c \gt 1) then
    satis[x] = 1
  back on track
back on track

形式化定义:有 \(G = (V, E), d \in E\),判断:

\(\exists x, y, (\exists v = (v_1, v_2, \cdots, v_k), v_1 = x \land v_k =y \land (\forall 1 \le i < k, (v_i, v_{i + 1}) \in E)) \land (\nexists v = (v_1, v_2, \cdots, v_k), v_1 = x \land v_k =y \land (\forall 1 \le i < k, (v_i, v_{i + 1}) \in E \backslash \{d\}))\)

跟点的情况很像,具体看伪代码:

function() Tarjan(x, fa) does
  dfn[x] = low[x] = ++cnt, vis[x] = 1
  for(each i \in adj[x]) does
    when(!vis[i]) then
      Tarjan(i, x, rt)
      low[x] sets(\min) low[i]
      (note)(没有根的特殊情况)
      when(low[i] \ge dfn[x]) then
        satis[i] = 1 (note)(实际上是孩子)
      back on track
    and when(i \ne fa) then
      low[x] sets(\min) dfn[i]
    back on track
  back on track
  (note)(没有根的特殊情况)
back on track

我随机删去一条边,判断剩下的图中某两个点是否一定连通?

很简单:

按照上面的方式处理出桥,断掉桥,条件满足当且仅当之后的图中两个点仍然连通。

标签:land,连通性,track,when,back,dfn,low
From: https://www.cnblogs.com/hhc0001deljbk/p/18124049

相关文章

  • redis查询端口与密码以及连通性测试方法
    目录一.端口查找二.密码查找三.连通性测试前言:redis的配置信息都在redis.conf文件里面,可以通过find/-nameredis.conf 进行查找文件存放位置,然后进入redis.conf文件进行查看一.端口查找1.使用命令 ps-ef|grepredis进行查找,示例6450/6451均为redis......
  • 有向图的连通性
    强连通:如果两个点彼此都能到达对方,那么这两个点是连通的。如果一个图中任意两个点都连通,那么这个图是强连通图。强连通分量:如果一个图不是强连通图,那么可以将其分为多个子图,使得每个子图强连通且不能与其他的子图形成强连通,那么每个子图就是强连通分量。简单点说,如果将所有子图缩......
  • 测试网络端口连通性
    简介:在网络服务中,经常需要测试是否能连接服务器,ping服务器地址能通只能表示三层网络没问题,而不能表示上层服务端口号正常,而这就需要我们运用工具来测试四层端口号是否正常?可以通过Telnet、nc、ssh命令来测试端口连通性1、TelnetTelnet只能用于测试TCP端口,而nc即可用于测试TCP......
  • 【学习笔记】《综述图论中连通性及相关问题的一些处理方法》
    2023集训队论文第一篇。发现好像存在很多我不会/见过但是从来没记住过的结论之类的,所以这篇主要是背结论用的。目录无向图双连通性点双连通分量的性质耳分解割空间与环空间有向图可达性问题强连通性有向环竞赛图记\(u\rightsquigarrowv\)为\(u\)到\(v\)的路径,\(u\t......
  • Windows如何检测UDP端口的连通性
    在Windows平台上如何检测UDP端口的连通性呢?其实,平时我们遇到检测TCP端口的连通性的情况比较多,遇到检测UDP端口连通性的情况较少。而且检测UDP端口的连通性比较复杂一点。像检测TCP端口是否连通(放开),Windows平台,一般常用的工具有telnet、psping等工具,而检测UDP端口的工具,在Linux平台......
  • 动态图连通性
    Describe:你要维护一张无向简单图(即没有自环,没有重边的无向图)。你被要求加入删除一条边及查询两个点是否连通。0:加入一条边。保证它不存在。1:删除一条边。保证它存在。2:查询两个点是否联通。允许离线Solution:对于离线做法,可以用线段树分治加可撤销并查集,时间仅\(O(n\lo......
  • 图的连通性
    图的连通性这个专题,不太好说,因为涉及到的东西实在是太广泛太杂了,我们这里就只讲建模,至于建模之后的处理方式可以移步至其他的知识点。强连通对于有向图,我们可以发现,如果每个点的贡献和影响与这个点可达的点有关,那么我们就可以将一个强连通分量缩点,将原图转化为一个有向无环图,然......
  • 图论——连通性
    图论——连通性基本知识路径相关途径:连接一串结点的序列称为途径,用点序列\(v_{0..k}\)和边序列\(e_{1..k}\)描述,其中\(e_i=(v_{i-1},v_i)\),通常写为\(v_0\tov_1\to\cdots\tov_k\)。迹:不经过重复边的途径称为迹。回路:\(v_0=v_k\)的迹称为回路。......
  • 连通性问题
    求割点#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllN=2e4+10;lln,m,dfn[N],low[N],tot,root;boolcut[N];vector<ll>G[N];voidtarjan(llu){ dfn[u]=low[u]=++tot; llflag=0; for(autov:G[u]){ if(!dfn[v]){ ta......
  • 网络连通性测试 【Connectivity】
    CFD简介CFD(ConnectivityFaultDetection,连通错误检测)是一种二层网络中的端到端OAM(Operation,Administration,andMaintenance,操作、管理和维护)技术,主要用于在二层网络中检测链路连通性,以及在故障发生时进行定位。适用的二层网络包括基于VLAN的以太网网络和基于MPLS的二层V**。......