题目意思:给出一个图,点数和边数。然后要求至少加多少条边,使得
这个图成为 边双连通的图。
算法竞赛进阶指南,图论习题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)
{