https://www.luogu.com.cn/problem/P2860


思路:两条路径相互分离,是指两条路径没有一条重合的道路。

也就是说如果任意两点间达到的方式中有一条边100%要走到。那么这条是什么呢?

联想到无向图中桥的概念,就是说如果去掉了这个桥,整个图就不连通了。

可以得到结论:只要这个图中不存在桥,那么就一定存在两条相互分离的路径。

因此这个题目可以理解为求把给定无向图转换成不含桥的无向图所需连边的最少数量。

那么考虑缩点。

无向图缩点搞了半天,看别人有用bfs搞的,但是我怎么搞都不对,可能是前向星的什么特点把或者是我又出了bug。但是这个缩点可以和有向图tarjan把强连通分量缩点的代码一样。

因为在无向图中用tarjan只是不访问父亲,并且在已经访问过的节点 中更新时间戳中有一个参数不一样。那么其他和强连通分量是一致的,也就是说一个连通分量里的dfn和low的判定条件是一样的。也就是dfn[x]==low[x].剩下的就在栈里面弹出。

具体的可以看之前tarjan板块里的强连通分量缩点。

不过有向图缩点有一个特殊的地方,相连的两块统计度数的时候在A->B会算一次,B->A会算一次。所以判度数为1的时候需要是度数/2==1;

最后缩完点后就是一颗树,构造发现是(叶子节点数+1)/2;

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<stack>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e5+100;
typedef long long LL;
vector<LL>g[maxn];
stack<LL>s;
LL n,m;
LL low[maxn],dfn[maxn],col[maxn],times=0,cnt=0,du[maxn],fa[maxn];
bool inq[maxn],ma[5010][5010];
void tarjan2(LL u)
{dfn[u]=low[u]=++times;s.push(u);inq[u]=true;for(LL i=0;i<g[u].size();i++){LL to=g[u][i];if(!dfn[to]){fa[to]=u;tarjan2(to);if(low[to]>dfn[u]){///  cout<<u<<" "<<to<<endl;}low[u]=min(low[u],low[to]);}else if(to!=fa[u])low[u]=min(low[u],dfn[to]);}if(low[u]==dfn[u]){cnt++;LL y;do{y=s.top();inq[y]=false;col[y]=cnt;s.pop();}while(y!=u);return;}
}int main(void)
{cin.tie(0);std::ios::sync_with_stdio(false);cin>>n>>m;memset(fa,-1,sizeof(fa));for(LL i=1;i<=m;i++){LL u,v;cin>>u>>v;if(ma[u][v]) continue;ma[u][v]=ma[v][u]=true;g[u].push_back(v);g[v].push_back(u);}for(LL i=1;i<=n;i++){if(!dfn[i]) tarjan2(i);}for(LL i=1;i<=n;i++){for(LL j=0;j<g[i].size();j++){if(col[i]!=col[g[i][j]]) du[col[i]]++;}}LL sum=0;for(LL i=1;i<=cnt;i++){/// cout<<du[i]<<endl;if(du[i]==1) sum++;}cout<<(sum+1)/2<<endl;return 0;
}

Redundant Paths(边双连通分量缩点+思维构造)相关推荐

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

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

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

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

  3. Div1 小A抓小B tarjan双连通分量缩点+dfs

    题目描述 小A和小B在一个无向图G上进行一个游戏.图G是连通的,有n个点,n条边,无重边,无自环,结点编号为1~n.游戏开始前小A在结点x,小B在结点y(x≠y).游戏开始后,小A和小B轮流进行移动( ...

  4. AcWing 397. 逃不掉的路(边双连通分量缩点成树 + 树链剖分乱搞)

    整理的算法模板合集: ACM模板 我们知道在同一个边双连通分量中的点没有必经边(因为至少有两条分离的路径). 所以我们直接tarjan求出桥后缩点,然后求一下树上两点间的距离即可. 那么如何求树上两点 ...

  5. POJ - 3177 Redundant Paths(边双缩点)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,现在问至少添加几条边,才能使得任意两点之间都能由至少两条不同的路到达 题目分析:既然要让任意两点之间至少由两条道路连接,换句话说也就 ...

  6. POJ 3177 Redundant Paths(边双联通分量)

    题目描述: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1 ...

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

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

  8. POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)

    [题意]一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(每次回答是在上一次连边的基础之上) [分析]好题,做完后涨了很多姿势~ 普通做法当然就是每加 ...

  9. tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)

    基本概念 给定无向连通图G = (V, E) 割点: 对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点 割边(桥) 若对于e∈E,从图中删去边e之 ...

  10. 双连通分量(点-双连通分量边-双连通分量)

    概念: 双连通分量有点双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图. 一个无向图中的每一个极大点(边)双连 ...

最新文章

  1. 基于IndexedDB实现简单文件系统
  2. fckeditor的jsp中的使用
  3. 多边形面积(Area_Of_Polygons)
  4. 10_30_unittest
  5. group by和order by在springboot中连用03
  6. Spring Cloud--鸿鹄Cloud分布式微服务云系统—云架构代码结构构建(五)
  7. 零基础学Python--------第3章 流程控制语句
  8. 龙星电脑横机制版软件_龙星制版软件下载 龙星电脑横机是什么系统
  9. 毕业设计-基于stm32的校园旧物回收系统
  10. Mugeda(木疙瘩)H5案例课—交互视频类H5-岑远科-专题视频课程
  11. html密码浏览器不自动登录,怎样取消浏览器密码的自动登录
  12. 双系统正确卸载Ubuntu系统
  13. Windows 10 数据恢复与预防数据丢失指南
  14. gvim 安装pathogen
  15. Web APIs /APIs --DOM简述/DOM中获取元素方法/事件(含鼠标事件)/操作(含案例)
  16. 高数量类别特征(high-cardinality categorical attributes)的预处理方法
  17. Velodyne已出货的激光雷达传感器价值达5亿美元
  18. pikachu通关教程~~~~
  19. 全球化同步时代,电子名片六大功能助你销售
  20. android 消息模式Toast.makeText的几种常见用法

热门文章

  1. ppt流程图箭头分叉_箭头循环图ppt模板_PPT结构图制作中箭头跟着目标走的技巧_ppt箭头流程图模板_ppt箭头循环图...
  2. php fpm 报错,php-fpm报错
  3. 如何手工还原/附加MSSQL 2000数据库(sqlserver2000版本)
  4. python命名空间与作用域
  5. 大龄程序员的成长之路
  6. [渝粤教育] 西南科技大学 汉语写作 在线考试复习资料
  7. 微信公众号添加html,网站中增加微信公众账号链接的方法
  8. 计算机应用 一级学科,一级学科、二级学科,考研专业哪个包含了计算机考研方向...
  9. linux系统安装文网卫士,360主机卫士 linux版的安装/使用/卸载 方法
  10. Python实现太极图案