这个题最开始我想的是,直接缩点求双连通分量,连接这些双联通分量不就行了吗?

但是其实是不对的,双连通内部双联通,我们如果任意的连接一条边在这些双联通分量之间,他们之间有没有桥其实并不知道。

我应该是求缩点以后的叶子节点的个数,因为叶子节对于其本身来说,只有一条桥于其相连,我们可以连接两个叶子节点。那么这个两个区域就合成了一个双联通分量区域。同时为了减少边的使用,我们可以连接两个都是叶子节点的点。最后+1,剩下一个也应该连接。这样就能非常容易的算出把图变成双连通,所需要的边的数目。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
const int N = 1e4+,M = 1e5+;
int head[N],Next[M],ver[M],low[M],dfn[M],stack[M];
int block;
int belong[M],deg[M];
bool brige[M],ins[M];
int c[M],dcc,top;
int tot,n,m,num,cnt;
void add(int x,int y)
{
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
}
void tarjan(int u,int pre)
{
int v;
dfn[u]=low[u]=++num;
stack[++top]=u;
ins[u]=;
for (int i=head[u]; i; i=Next[i])
{
v=ver[i];
if (v==pre)continue;
if (!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
if (low[v]>dfn[u])
{
brige[i]=;//标记为桥
brige[i^]=;
cnt++;
}
}
else low[u]=min(low[u],dfn[v]);
}
if (low[u]==dfn[u]){//如果当前节点是一个根节点 也就是说我们DFS完了这个连通分量
cnt++;
do
{
v=stack[top--];//把这个连通分量里面的所有点都拿出来
ins[v]=;
c[v]=cnt;//标记上所在的连通分量
}while(u!=v);
}
}
void init(){
memset(Next,,sizeof(Next));
memset(low,,sizeof(low));
memset(brige,,sizeof(brige));
memset(head,,sizeof(head));
memset(ver,,sizeof(ver));
memset(dfn,,sizeof(dfn));
memset(c,,sizeof(c));
tot=;
cnt=;
num=;
dcc=;
top=;
}
int main()
{
int u,v;
while(~scanf("%d%d",&n,&m))
{
init();
for (int i=; i<=m; i++)
{
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
for (int i=;i<=n;i++){
if (!dfn[i]){
tarjan(i,i);
}
}
for (int i=;i<=n;i++){
for (int j=head[i];j;j=Next[j])
{
if (brige[j]) //缩点后把桥两边的缩点的度++
deg[c[i]]++;
}
}
int ans=;
for (int i=;i<=cnt;i++){
if (deg[i]==){//我们找出缩点后度为1的点,也就是叶子节点,
ans++;
}
}
printf("%d\n",(ans+)/);//那么把图连接成双联通分量的所需边=(缩点后叶子节点的个数+1)/2
//因为很简单 我把叶子节点两两连接起来,那么这样消耗的边也就是最少的。这样我们就能让图
//变成双联通的
}
return ;
}

[kuangbin带你飞]专题九 连通图E POJ 3177 Redundant Paths的更多相关文章

  1. [kuangbin带你飞]专题九 连通图

        ID Origin Title   76 / 163 Problem A POJ 1236 Network of Schools   59 / 177 Problem B UVA 315 Ne ...

  2. [kuangbin带你飞]专题九 连通图D - Network POJ - 3694

    这道题其实也非常简单,只是在求割边及其个数的情况下,每次往里面加入新的边,并再次计算割边的个数. 我们用tarjan可以求出原图的桥以及个数,当然我们不能暴力加边,然后求解,那么如何求呢??? 其实非 ...

  3. [kuangbin带你飞]专题九 连通图C - Critical Links UVA - 796

    这道题就是要求桥的个数. 那么桥相应的也有判定的定理: 在和u相邻的节点中,存在一个节点是最小的时间戳都比 当前u的访问次序要大,也就是说这个点是只能通过果u到达,那么 他们之间相邻的边就是的桥 #i ...

  4. [kuangbin带你飞]专题九 连通图B - Network UVA - 315

    判断割点的性质: 如果点y满足 low[y]>=dfn[x] 且不是根节点 或者是根节点,满足上述式子的有两个及其以上. 就是割点 如果是起点,那么至少需要两个子节点满足上述条件,因为它是根节点 ...

  5. 给自己的小练习19-[kuangbin带你飞]专题九连通图

    没有写题解.补一波 Network of Schools 问题1:求有向图中入度为0的点个数 问题2:使得整个图变成一个联通分量 问题1直接缩点统计 问题2=max(入度为0的点,出度为0的点),注意 ...

  6. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  7. 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  8. POJ 3177——Redundant Paths——————【加边形成边双连通图】

    Redundant Paths Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  9. [kuangbin带你飞]专题十 匹配问题

        A-L 二分匹配 M-O 二分图多重匹配 P-Q 二分图最大权匹配 R-S 一般图匹配带花树 模板请自己找     ID Origin Title   61 / 72 Problem A HD ...

随机推荐

  1. 二零一七年工作中常用的基本Linux命令记录(Ubuntu)

    Linux命令如下(Ubuntu): 1. apt-get install openssh-server 下载远程工具 2. apt-get install lrzsz 上传下载工具 3. apt-g ...

  2. java-异常处理2

    一 编译时异常和运行时异常的区别 java认为如果你的程序有问题,你应该让调用者知道. 例如:面包,长毛了.用户去买了,用户可能会挂 .应该在面包上贴上标签(异常). java 如果在函数内抛出Exc ...

  3. tcpdump的表达式介绍

    表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获.如果没有给出任何条件,则网络上所有的信息包 将会被截获. 在表达式中一般如下几种类 ...

  4. hadoop-hive查询ncdc天气数据实例

    使用hive查询ncdc天气数据 在hive中将ncdc天气数据导入,然后执行查询shell,可以让hive自动生成mapredjob,快速去的想要的数据结果. 1. 在hive中创建ncdc表,这个 ...

  5. 安装mysql报错2503

    安装MySQL-5.5.27报这个错误: The installer has encountered an unexpected error installing this package.This ...

  6. Vue--由自动获取焦点引出的DOM、mounted、自定义指令

    一.自动获取焦点的DOM实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  7. OpenLayers在地图外放置控件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  8. arcgis增大缩放级别

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 合唱队形 ( 双向LIS )

    #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; ] ...

  10. 【JZOJ3295】【SDOI2013】泉(spring)

    ╰( ̄▽ ̄)╭ 济南市"泉历史研究小组"依据济南特有的泉脉关系将济南的泉水分为六个区域,分别是市中区.历下区.天桥区.槐荫区.历城区.长清区. 作为光荣的济南泉历史研究小组中的一员 ...