http://poj.org/problem?id=3177

这个妹妹我大概也曾见过的~~~我似乎还没写过双联通分量的blog,真是智障。

最少需要添多少条边才能使这个图没有割边。

边双缩点后图变成一棵树,( 树上度数为1的点的数目+1 ) / 2就是答案。

注意:

1.直接缩成一个点的时候特判一下(不需要加边)。

2.找割边同时用栈缩点的话要注意需要缩成一个点的是割边后面所有的点,能缩的时候直接判断末尾有没有到当前点就完事了,如果判断low来找割边后面所有的点是不准确的。

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
#define LL long long
#define pa pair<int,int>
const int maxn=;
const LL minf=(LL)5e17;
int n,m;
struct nod{
int x,y,next;
}e[maxn*];
int head[maxn]={},tot=;
int dfn[maxn]={},low[maxn]={},cnt=,tn=;
int sta[maxn]={},bel[maxn]={},fa[maxn]={},tai=;
int vis[maxn]={};
inline void init(int x,int y){
e[++tot].y=y;e[tot].next=head[x];head[x]=tot;
}
void dfs(int x,int p,int f){
dfn[x]=low[x]=++cnt;sta[++tai]=x;
for(int i=head[x];i;i=e[i].next){
if(i==p)continue;
if(!dfn[e[i].y]){
dfs(e[i].y,i^,x);
low[x]=min(low[x],low[e[i].y]);
}
else low[x]=min(dfn[e[i].y],low[x]);
}
if(low[x]==dfn[x]){
tn++;
while(tai&&sta[tai]!=x){
bel[sta[tai--]]=tn;
}bel[sta[tai--]]=tn;
fa[tn]=f;
}
}
int main(){
scanf("%d%d",&n,&m);
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
init(x,y);init(y,x);
}
dfs(,,);
if(tn==){printf("0\n");return ;}
for(int i=;i<=tn;i++){fa[i]=bel[fa[i]];vis[fa[i]]++;}
int ans=;
if(vis[tn]==)ans=;
for(int i=;i<=tn;i++)if(!vis[i])++ans;
printf("%d\n",ans/);
return ;
}

POJ 3177 Redundant Paths 双联通分量 割边的更多相关文章

  1. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  2. tarjan算法求桥双连通分量 POJ 3177 Redundant Paths

    POJ 3177 Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12598   Accept ...

  3. POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)

    这两题好像是一样的,就是3177要去掉重边. 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是. 这两题我用了求割边,在去掉割边,用DFS缩点. 有大神说用Tarjan,不过 ...

  4. poj 3177 Redundant Paths 求最少添加几条边成为双联通图: tarjan O(E)

    /** problem: http://poj.org/problem?id=3177 tarjan blog: https://blog.csdn.net/reverie_mjp/article/d ...

  5. POJ 3177 Redundant Paths 无向图边双联通基础题

    题意: 给一个无向图,保证任意两个点之间有两条完全不相同的路径 求至少加多少边才能实现 题解: 得先学会一波tarjan无向图 桥的定义是:删除这条边之后该图不联通 一条无向边(u,v)是桥,当且仅当 ...

  6. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

  7. [kuangbin带你飞]专题九 连通图E POJ 3177 Redundant Paths

    这个题最开始我想的是,直接缩点求双连通分量,连接这些双联通分量不就行了吗? 但是其实是不对的,双连通内部双联通,我们如果任意的连接一条边在这些双联通分量之间,他们之间有没有桥其实并不知道. 我应该是求 ...

  8. POJ - 3177 Redundant Paths 说说连通分量吧

    ----我想说说双联通分量还有割点和桥 1.割点(一个点,如果没有这一个点,图就会变得不连通) 2.桥(一条边,断开这条边就会让图不连通) 3.点双连通(没割点的图) 4.边双连通(没桥的图) 5.割 ...

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

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

随机推荐

  1. 单调栈(G - Sliding Window POJ - 2823 )

    题目链接:https://cn.vjudge.net/contest/276251#problem/G 题目大意:给你n和m,然后问你对于(m,n)这中间的每一个数,(i-m+1,i)这个区间的最小值 ...

  2. 2016.5.18——Excel Sheet Column Number

    Excel Sheet Column Number 本题收获: 1.对于字符串中字母转为ASIIC码:string s ;res = s[i]-'A'; 这个res就是数字s[i]-'A'是对ASII ...

  3. Dream------scala--Tuple、Array、Map与文件操作

    1.Tuple(元组) 一般使用中,假设一个函数返回多个值,我们可以使用tuple接受这个(val (x,y) = myfunction) package com.wls.scala.hello /* ...

  4. trace spring

    package xx.com.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotati ...

  5. django Rest Framework----认证/访问权限控制/访问频率限制 执行流程 Authentication/Permissions/Throttling 源码分析

    url: url(r'books/$',views.BookView.as_view({'get':'list','post':'create'})) 为例 当django启动的时候,会调用执行vie ...

  6. python 之datetime库学习

    # -*- coding:utf-8 -*- import refrom datetime import datetime, timezone, timedelta def rec_time():   ...

  7. MyEclipse开发工具,当选中一个单词时,其他相同的单词会被高亮显示(选中/标记)

    1.步骤: Window-->Preferences-->Java-->Editor-->Mark Occurremces下的 Mark Occurremces of the ...

  8. thinkphp模版常量替换机制

  9. CF614A 【Link/Cut Tree】

    题意:求出所有w^i使得l<=w^i<=r 输入为一行,有三个数,分别是l,r,w.意义如题目所描述 输出为一行,输出所有满足条件的数字,每两个数字中间有一个空格 如果没有满足条件的数字则 ...

  10. babel转换不了有些es6

    bable只转换新语法 不支持新的全局变量如promise async等等,可以使用babel-polyfilll来兼容