题意:

给一个无向图,保证任意两个点之间有两条完全不相同的路径

求至少加多少边才能实现


题解:

得先学会一波tarjan无向图

桥的定义是:删除这条边之后该图不联通

一条无向边(u,v)是桥,当且仅当(u,v)为树枝边,且满足 DFN(u)<Low(v).(因为 v 想要到
达 u 的父亲必须经过(u,v)这条边,所以删去这条边,图不连通)

先用Tarjan无向图缩边双联通分量,这样原图就构成了一颗树,

对于树的叶子节点来说,显然他们需要连边,可以证明的是,我们连至多(叶子节点个数+1)/2的边就可以完成加边(叶子节点两两相连)

所以答案就是(叶子节点个数+1)/2

 #include<cstdio>
#include<algorithm>
#include<cstring>
#define N 5010
#define M 10100
using namespace std;
int head[N],cut[M],n,m,ecnt=,u,v,dfn[N],low[N],indx,fa[N],du[N],ans;
struct edge
{
int u,v,nxt;
}e[M*];
inline int find(int x)
{
return fa[x]=fa[x]==x?x:find(fa[x]);
}
void add(int u,int v)
{
e[ecnt].v=v;
e[ecnt].nxt=head[u];
e[ecnt].u=u;
head[u]=ecnt++;
e[ecnt].v=u;
e[ecnt].nxt=head[v];
e[ecnt].u=v;
head[v]=ecnt++;
}
void dfs(int u,int E)
{
dfn[u]=low[u]=++indx;
for (int i=head[u];i;i=e[i].nxt)
{
if (i==(E^)) continue;
int v=e[i].v;
if (!dfn[v])
{
dfs(v,i);
if (low[v]<low[u]) low[u]=low[v];
if (low[v]>dfn[u]) cut[i]=cut[i^]=;
}
else
if (dfn[v]<low[u])
low[u]=dfn[v];
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
{
scanf("%d%d",&u,&v);
add(u,v);
}
dfs(,-);
for (int i=;i<=n;i++)
fa[i]=i;
for (int i=;i<ecnt;i+=)
if (!cut[i]) fa[find(e[i].u)]=find(e[i].v);
for (int i=;i<ecnt;i+=)
if (cut[i]) du[find(e[i].u)]++,du[find(e[i].v)]++;
for (int i=;i<=n;i++)
if (find(i)==i && du[i]==) ans++;
printf("%d",(ans+)/);
return ;
}

POJ 3177 Redundant Paths 无向图边双联通基础题的更多相关文章

  1. POJ 3177 Redundant Paths(边双连通的构造)

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13717   Accepted: 5824 ...

  2. POJ 3177 Redundant Paths(边双连通分量)

    [题目链接] http://poj.org/problem?id=3177 [题目大意] 给出一张图,问增加几条边,使得整张图构成双连通分量 [题解] 首先我们对图进行双连通分量缩点, 那么问题就转化 ...

  3. POJ - 3177 Redundant Paths (边双连通缩点)

    题意:在一张图中最少可以添加几条边,使其中任意两点间都有两条不重复的路径(路径中任意一条边都不同). 分析:问题就是最少添加几条边,使其成为边双连通图.可以先将图中所有边双连通分量缩点,之后得到的就是 ...

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

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

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

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

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

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

  7. POJ 3177 Redundant Paths 双联通分量 割边

    http://poj.org/problem?id=3177 这个妹妹我大概也曾见过的~~~我似乎还没写过双联通分量的blog,真是智障. 最少需要添多少条边才能使这个图没有割边. 边双缩点后图变成一 ...

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

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

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

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

随机推荐

  1. 图解HTTP-1.web和网络基础

    目录 1. 3 项 WWW 构建技术 2. TCP/IP 是互联网相关的各类协议族的总称 协议(protocol) TCP/IP分层管理 TCP/IP通信传输流 封装(encapsulate) 3. ...

  2. datatable设置动态宽度,超过一定长度出现滚动条

    获得宽度:var tableAutoWidth = $('.dataTable_wrapper').width();if (tableAutoWidth < 1200) { tableAutoW ...

  3. pycharm快捷键一览

    编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完成Ctrl + P ...

  4. 死锁-Java代码示例

    class MyThread implements Runnable{ private Object o1 = new Object(); private Object o2 = new Object ...

  5. php扩展开发-常量

    //常量在内核中的结构 typedef struct _zend_constant { zval value; int flags; char *name; uint name_len; int mo ...

  6. RepeatMasker使用

    RM是library-based,通过相似性比对来识别重复序列,可以屏蔽序列中转座子重复序列和低复杂度序列(默认将其替换成N).使用数据库Dfam和Repbase. The Dfam database ...

  7. Educational Codeforces Round 42D. Merge Equals(STL)

    D. Merge Equals time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  8. centos安装xfce及输入法

    一.执行CentOS7 最小安装 去官网 https://www.centos.org/ 下载CentOS-7-x86_64-Minimal-1804.iso,然后使用rufus刻录U盘,安装之.安装 ...

  9. POJ:3685-Matrix

    Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 7879 Accepted: 2374 Description Gi ...

  10. 移动端的拖拽排序在react中实现 了解一下

    最近做一个拖拽排序的功能找了好几个有一个步骤简单,结合redux最好不过了,话不多说上代码 第一步: npm install react-draggable-tags --save 第二步 sort. ...