$tarjan$简要学习笔记
$QwQ$因为$gql$的$tarjan$一直很差所以一直想着要写个学习笔记,,,咕了$inf$天之后终于还是写了嘻嘻.
首先说下几个重要数组的基本定义.
$dfn$太简单了不说$QwQ$
但是因为有向图无向图的$low$定义不一样,,,所以我我我我区分下两个$low$的定义,$QAQ$
有向图中的$low[x]:$在栈中且$x$的子树能到达的点.的$dfn$最小值
无向图中的$low[x]:$能通过一条不在搜索树上的边与$x$的子树中的点联通的点.的$dfn$最小值.
首先了解下$tarjan$的核心代码趴$QwQ$
if(x是y搜索树上的父亲)low[x]=min(low[x],low[y])
else low[x]=min(low[x],dfn[y])
不难理解?考虑$low_x$的定义是$x$及$x$的子树中能追溯到的$dfn$最小值.所以当$y$在$x$子树内时可以直接用$low$更新,否则就只能用$dfn$更新.
然后说下$tarjan$的几个基本应用
无向图割边
无向边$(x,y)$是桥,当且仅当搜索树上存在$x$的一个子节点$y$,满足$dfn[x]<low[y]$.
正确性显然不说.
注意因为这里的条件是小于号所以在更新$low[x]=min(low[x],dfn[y])$的时候要保证$y$不是$x$的父亲.
但是还有个要注意的在于如果有重边就不需要保证$y$不是$x$的父亲了,$QwQ$
这里解决办法是判断边$(x,y)$是不是就是和当前扩展到点$x$的边成对存在的边,用类似网络流的搞下就成.
无向图割点
若$x$不是根,则$x$是割点当且仅当搜索树上存在$x$的一个节点$y$满足$dfn_x\leq low_y$
若$x$是根,则$x$是割点当且仅当搜索树上存在两个像上面那样的点$y$
因为这里的条件是等号所以就不需要像前面那样还判些乱七八糟的东西辣$QwQ$
无向图点双
和求割点类似,用个栈存着当前所有访问到的点,当有$dfn_x\leq low_y$的时候缩到一个点双中.
注意点双的定义与强联通分量不一样$QAQ$,就说点双是指的不存在割点的极大联通图.强联通分量是指的任意两点互相可达的极大联通图.
板子 $code$
无向图边双
和强联通分量求法是一样的,只是因为是无向边所以要注意别跑回父亲了,$over$
板子 $code$
有向图强联通分量
若在$x$回溯前有$dfn_x=low_x$,则栈中从$x$到栈顶的所有节点构成一个强联通分量.
板子 $code$
一个小变式 $code$
有向图必经点&有向图必经边
$QwQ$要用到支配树,,,?
告辞:)
随机推荐
- 19-3 auth模块
参考:https://www.cnblogs.com/liwenzhou/p/9030211.html 一 auth使用django默认的user表 1 auth常用方法 1. authenticat ...
- 谈一谈Python的上下文管理器
经常在Python代码中看到with语句,仔细分析下,会发现这个with语句功能好强,可以自动关闭资源.这个在Python中叫上下文管理器Context Manager.那我们要怎么用它,什么时候用它 ...
- JS高级第1天
阶段目标 主要学习 JS 的面向对象编程思想. 对象 概念 在编程领域,任何 事 和 物都可以概括成对象. 对象概念练习 用编程思想抽象出你心仪对象的属性和方法. 对象由属性和方法组成,属性和方法都可 ...
- Java中Map/List/Set .
很实用,分享一下. 简单版本 复杂版本 参考: http://initbinder.com/articles/cheat-sheet-for-selecting-maplistset-in-java. ...
- hdu 3662 3D Convex Hull
Problem - 3662 题意很简单,构造三维凸包,求凸包有多少个面. 代码如下: #include <cstdio> #include <iostream> #inclu ...
- C#面向对象--练习题
public class Program { //用户自定义:我们自己定义这种数据类型 public struct jiegouti// 结构体前面加上public, 可供外界访问 { public ...
- mybatis 基础理解resultType和resultMap
resultType和resultMap: 1.resultType: 一.返回一般数据类型比如要根据 id 属性获得数据库中的某个字段值. mapper (dao)接口: // 根据 id 获得数据 ...
- uni-app学习记录03-路由跳转
<template> <view class="content"> <!-- v-show是相对于display: none --> <v ...
- jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore
jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore均是为了解决对象中存在双向引用导致的无限递归(infinite recur ...
- 一次操作系统报错OutOfMemory Error的处理记录
在启动公司内嵌的tomcat容器时出现报错, 如下: # There is insufficient memory for the Java Runtime Environment to contin ...