当前位置:网站首页>无向图的桥
无向图的桥
2022-07-02 09:46:00 【chengqiuming】
一 点睛
时间戳:dfn[u] 表示节点 u 深度优先遍历的序号。
追溯点:low[u]表示节点u或u的子孙能通过非父子追溯到dfn最小节点的序号,即回到最早的过去。
二 举例
初始时,dfn[u]=low[u],如果该节点的邻节点未被访问,则一直进行深度优先遍历,1-2-3-5-6-4,此时 4 的邻接点 1 已被访问,且 1 不是 4 的父节点,4 的父节点是6(深度优先搜索树上的父节点)。

节点 4 能回到最早的节点是节点1(dfn=1),因此low[4]=min(low[4],dfn[1])=1,返回时,更新low[6]=min(low[6],low[4])=1。更新路径上所有祖先节点的 low 值,因为子孙能回到的追溯点,其祖先也能回到。

三 无向图的桥
桥判定法则:无向边 x-y 是桥,当且仅当搜索树上存在一个节点 y,满足 low[y] > dfn[x]。
也就是说,如果孩子的 low 值比自己大,则从该节点到这个孩子的边为桥。在上图中,边5-7中,5的子节点为7,满足 low[7]>dfn[5],因此 5-7 为桥。
四 代码
package graph.tarjanbridge;
import java.util.Arrays;
import java.util.Scanner;
public class TarjanBridge {
static int SIZE = 100010;
static int head[] = new int[SIZE], to[] = new int[SIZE << 1], next[] = new int[SIZE << 1];
static int cnt = 0;
static void addEdge(int x, int y) {
to[cnt] = y;
next[cnt] = head[x];
head[x] = cnt++;
to[cnt] = x;
next[cnt] = head[y];
head[y] = cnt++;
}
static int dfn[] = new int[SIZE], low[] = new int[SIZE];
static int index;
static boolean bridge[] = new boolean[SIZE << 1];
static void tarjan(int x, int edge) {
dfn[x] = low[x] = ++index;
for (int i = head[x]; i >= 0; i = next[i]) {
int y = to[i];
if (dfn[y] == 0) {
tarjan(y, i);
low[x] = Math.min(low[x], low[y]);
if (dfn[x] < low[y])
bridge[i] = bridge[i ^ 1] = true;
} else if (i != (edge ^ 1))
low[x] = Math.min(low[x], dfn[y]);
}
}
static void init() {
Arrays.fill(head, -1);
cnt = 0;
}
static int n, m;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
init();
for (int i = 0; i < m; i++)
addEdge(sc.nextInt(), sc.nextInt());
for (int i = 1; i <= n; i++)
if (dfn[i] == 0)
tarjan(i, -1);
for (int i = 1; i < cnt; i += 2)
if (bridge[i])
System.out.println(to[i ^ 1] + " " + to[i]);
}
}五 测试
![]()
边栏推荐
- 8A Synchronous Step-Down regulator tps568230rjer_ Specification information
- Post order traversal sequence of 24 binary search tree of sword finger offer
- [opencv learning] [image histogram and equalization]
- net share
- Five best software architecture patterns that architects must understand
- Unity SKFramework框架(十三)、Question 问题模块
- Unity SKFramework框架(十六)、Package Manager 開發工具包管理器
- js3day(数组操作,js冒泡排序,函数,调试窗口,作用域及作用域链,匿名函数,对象,Math对象)
- Heap acwing 839 Simulated reactor
- Unity SKFramework框架(二十一)、Texture Filter 贴图资源筛选工具
猜你喜欢

Tencent three sides: in the process of writing files, the process crashes, and will the file data be lost?
![JDBC prevent SQL injection problems and solutions [preparedstatement]](/img/32/f71f5a31cdf710704267ff100b85d7.png)
JDBC prevent SQL injection problems and solutions [preparedstatement]

West digital decided to raise the price of flash memory products immediately after the factory was polluted by materials

Dijkstra AcWing 850. Dijkstra finding the shortest circuit II

挥发性有机物TVOC、VOC、VOCS气体检测+解决方案

js3day(数组操作,js冒泡排序,函数,调试窗口,作用域及作用域链,匿名函数,对象,Math对象)

Fully autonomous and controllable 3D cloud CAD: crowncad's convenient command search can quickly locate the specific location of the required command.

Get started REPORT | today, talk about the microservice architecture currently used by Tencent

C#运算符

Heap acwing 838 Heap sort
随机推荐
Unity SKFramework框架(十三)、Question 问题模块
Rust语言文档精简版(上)——cargo、输出、基础语法、数据类型、所有权、结构体、枚举和模式匹配
PR usage skills, how to use PR to watermark?
The UVM Primer——Chapter2: A Conventional Testbench for the TinyALU
Jerry's weather code table [chapter]
模数转换器(ADC) ADE7913ARIZ 专为三相电能计量应用而设计
Ntmfs4c05nt1g N-ch 30V 11.9a MOS tube, pdf
JS iterator generator asynchronous code processing promise+ generator - > await/async
Uniapp develops wechat applet Tencent map function and generates sig signature of location cloud
Hash table acwing 841 String hash
Jerry's watch ringtone audition [article]
bellman-ford AcWing 853. Shortest path with side limit
How can attribute mapping of entity classes be without it?
js1day(输入输出语法,数据类型,数据类型转换,var和let区别)
[opencv learning] [common image convolution kernel]
8 examples of using date commands
js2day(又是i++和++i,if语句,三元运算符,switch、while语句,for循环语句)
js5day(事件监听,函数赋值给变量,回调函数,环境对象this,全选反选案例,tab栏案例)
[opencv learning] [Canny edge detection]
Async/await asynchronous function