题目大概是给一个无向连通图,问最少加几条边,使图的任意两点都至少有两条边不重复路径。

如果一个图是边双连通图,即不存在割边,那么任何两个点都满足至少有两条边不重复路径,因为假设有重复边那这条边一定就是割边,与不存在割边矛盾。

这题的解法是:原图的边双连通分量是符合要求的可以看作一点,即把原图的边双连通分量缩点,这样形成一个无向无环图,可以看作树,那么问题就变成给一棵树添最少边使其形成边双连通图。

而要添的最少的边的结论是:(树的叶子数+1)/2。构造大概就是给树的两对两对叶子添边。

具体的实现,用Tarjan求边双连通分量,过程中用并查集缩点,并记录割边。这样用并查集缩的点和割边就可以表示那个树,最后统计叶子数目求出答案。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 5555
#define MAXM 22222
struct Edge{
int v,next;
bool flag;
}edge[MAXM];
int NE,head[MAXN];
void addEdge(int u,int v){
edge[NE].v=v; edge[NE].next=head[u]; edge[NE].flag=;
head[u]=NE++;
} int par[MAXN];
int Find(int a){
while(a!=par[a]){
par[a]=par[par[a]];
a=par[a];
}
return a;
}
void Union(int a,int b){
int pa=Find(a),pb=Find(b);
if(pa==pb) return;
par[pa]=pb;
} int dn,dfn[MAXN],low[MAXN];
int cut[MAXM],cn;
void dfs(int u){
dfn[u]=low[u]=++dn;
for(int i=head[u]; i!=-; i=edge[i].next){
if(edge[i].flag) continue;
int v=edge[i].v;
if(dfn[v]){
low[u]=min(low[u],dfn[v]);
continue;
}
edge[i].flag=edge[i^].flag=;
dfs(v);
low[u]=min(low[u],low[v]);
if(low[v]>dfn[u]) cut[cn++]=i;
else Union(u,v);
}
} int deg[MAXN];
int main(){
int n,m,a,b;
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i) par[i]=i;
memset(head,-,sizeof(head));
while(m--){
scanf("%d%d",&a,&b);
addEdge(a,b); addEdge(b,a);
}
dfs();
for(int i=; i<cn; ++i){
++deg[Find(edge[cut[i]].v)]; ++deg[Find(edge[cut[i]^].v)];
}
int cnt=;
for(int i=; i<=n; ++i){
if(deg[i]==) ++cnt;
}
printf("%d",cnt+>>);
return ;
}

POJ3177 Redundant Paths(边双连通分量+缩点)的更多相关文章

  1. poj 3177 Redundant Paths(边双连通分量+缩点)

    链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ...

  2. poj3177 Redundant Paths 边双连通分量

    给一个无向图,问至少加入多少条边能够使图变成双连通图(随意两点之间至少有两条不同的路(边不同)). 图中的双连通分量不用管,所以缩点之后建新的无向无环图. 这样,题目问题等效于,把新图中度数为1的点相 ...

  3. POJ3177 Redundant Paths【双连通分量】

    题意: 有F个牧场,1<=F<=5000,现在一个牧群经常需要从一个牧场迁移到另一个牧场.奶牛们已经厌烦老是走同一条路,所以有必要再新修几条路,这样它们从一个牧场迁移到另一个牧场时总是可以 ...

  4. POJ3177 Redundant Paths —— 边双联通分量 + 缩点

    题目链接:http://poj.org/problem?id=3177 Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total ...

  5. [POJ3177]Redundant Paths(双联通)

    在看了春晚小彩旗的E技能(旋转)后就一直在lol……额抽点时间撸一题吧…… Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Tota ...

  6. POJ 3177 Redundant Paths (边双连通+缩点)

    <题目链接> <转载于 >>>  > 题目大意: 有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新 ...

  7. [POJ3177]Redundant Paths(双连通图,割边,桥,重边)

    题目链接:http://poj.org/problem?id=3177 和上一题一样,只是有重边. 如何解决重边的问题? 1.  构造图G时把重边也考虑进来,然后在划分边双连通分量时先把桥删去,再划分 ...

  8. poj3177重修道路——边双连通分量缩点

    题目:http://poj.org/problem?id=3177 找桥,缩点,总之都是板子: 对于每个叶子,互相连一条边即可:若最后剩下一个,则去和根节点连边: 所以叶子节点数+1再/2即答案. 代 ...

  9. HDU 3686 Traffic Real Time Query System(双连通分量缩点+LCA)(2010 Asia Hangzhou Regional Contest)

    Problem Description City C is really a nightmare of all drivers for its traffic jams. To solve the t ...

随机推荐

  1. Mysql limit offset

    Mysql limit offset 假设数据库表student存在13条数据. 语句1:select * from student limit 9,4 语句2:slect * from studen ...

  2. HDU 4857 逃生 (优先队列+反向拓扑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 解题报告:有n个点,有m个条件限制,限制是像这样的,输入a  b,表示a必须排在b的前面,如果不 ...

  3. DrClient 校园网客户端破解

    好吧..详细点.这个功能就是破解学校的限制 让你开无线网共享给手机的时候 不会被断网 提示有代理软件..这样帮你电脑省好多流量.平板电脑也是 软件叫Process Explorer 不大 1M多 自己 ...

  4. [BZOJ1177][Apio2009]Oil

    [BZOJ1177][Apio2009]Oil 试题描述 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M ...

  5. poj1125最短路

    Stockbroker Grapevine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30408   Accepted: ...

  6. 在CentOS 6.4中编译安装gcc 4.8.1

    在CentOS 6.4中编译安装gcc 4.8.1 分类: C/C++ Linux/Unix2013-11-28 21:02 1877人阅读 评论(0) 收藏 举报 原文链接:http://www.c ...

  7. 用JAVA代码实现验证邮箱地址是否符合

    public class Test{ public static void main(String[] args){ Test t = new Test(); String email = " ...

  8. html标签属性大全

    <marquee>...</marquee>普通卷动 <marquee behavior=slide>...</marquee>滑动 <marqu ...

  9. 菜单栏展开和收起效果(纯js)

    2014年6月25日 15:36:29 需要关注的是: 1.用cookie保存用户当前点击的菜单项,不打扰后端代码 2.通过数学计算得到要显示和隐藏的div 3.点击事件是动态绑定到a标签上的,因此当 ...

  10. Avisynth + DirectShow + WebCamera 实现Avisynth脚本访问摄像头

    准备工作:需要以下三种软件 1.Avisynth_258 安装文件和源码下载地址(Avisynth_258.exe 4.2 MB) http://sourceforge.net/projects/av ...