POJ 3352 Road Construction(边双连通分量)

该博客探讨了如何通过添加边将无向图转换为边双连通图的POJ 3352问题。关键点包括使用Tarjan算法识别割边,对具有相同low值的点进行缩点,并计算在缩点树上添加边的数量,以确保树成为边双连通图。解决方法涉及计算入度为1的缩点数量并除以2。
摘要由CSDN通过智能技术生成

题目意思:
给定一个无向图,图中没有重边,问添加几条边才能使得无向图变为 边双连通图

本题要点:
1、tarjan算法中,求割边时候,每个点都记录一个时间戳 dfn[i], 和回溯值 low[i]。
有多少个不同的low 值,就有多少个边双连通分量。
2、缩点:
把low值相同的点,看做是一个缩点。用 deg 数组记录每一个缩点的入度。
3、问题转化为:
在缩点树上,添加多少条边,才能使得树变为一个边双连通图。
至少添加边数 = (入度为1的缩点数 + 1) / 2

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MaxN = 2010;
int n, m, tot, num;
int head[MaxN], ver[MaxN], Next[MaxN], from[MaxN];
int dfn[MaxN], low[MaxN], deg[MaxN];
bool bridge[MaxN];

void add(int x, int y)
{
   
	ver[++tot] = y, from[tot] = x, Next[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值