poj 3177 Redundant Paths(边双连通eDCC,缩点)

题目意思:给出一个图,点数和边数。然后要求至少加多少条边,使得
这个图成为 边双连通的图。

算法竞赛进阶指南,图论习题14
1、套用 边双连通tarjan算法,然后做缩点处理。

2、int degree[MaxN]; // degree[i] 表示第i块边双连通分量的入度

3、算出 所有的边双连通的缩点,度数degree[i] == 1 的缩点个数 sum
最后答案就是 (sum + 1) / 2。 度数为1 的点两两配对,使得所有的
点边都能构成环,从而使得整个图是 边双连通的。

#include <cstdio>
#include <stack>
using namespace std;
const int MaxN = 5e3 + 10;
const int MaxM = 2e4 + 10;
int head[MaxN], ver[MaxM], Next[MaxM];
int dfn[MaxN], low[MaxN], n, m, tot, num;
bool bridge[MaxM];
int dcc[MaxN], cnt;	//边双连通字块的编号, 数量
int degree[MaxN];	// degree[i] 表示第i块边双连通分量的入度
stack<int> stk;

void add(int x, int y)
{
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值