-
E - Redundant Paths
- POJ - 3177
- 题意:加几条边使得图是一个边双连通图,缩点,然后找到度数唯一的点,即叶子节点(叶子节点+1)/2
-
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; #define maxn 5555 int mmp[maxn][maxn],ind; int dfn[maxn],n,u; int low[maxn],m,v; int cnt[maxn],sum; void tarjan(int u,int pre) { dfn[u]=low[u]=++ind; for(int i=1; i<=n; i++) if(mmp[u][i]) { if(!dfn[i]) { tarjan(i,u); low[u]=min(low[i],low[u]); } else if(i!=pre) low[u]=min(low[u],dfn[i]); } } int main() { scanf("%d%d",&n,&m); while(m--) { scanf("%d%d",&u,&v); mmp[u][v]=mmp[v][u]=1; } tarjan(1,1); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(mmp[i][j]&&low[i]!=low[j]) cnt[low[j]]++; for(int i=1; i<=n; i++) if(cnt[i]==1) sum++; printf("%d\n",(sum+1)/2); return 0; }
E - Redundant Paths - 无向图缩点-建边双联通图
最新推荐文章于 2022-08-27 22:35:51 发布
本文介绍了一种算法,用于解决如何通过增加边使图成为边双连通图的问题。核心步骤包括缩点和寻找度数为1的点,最终输出所需增加的边数。代码实现使用了Tarjan算法进行桥接点检测。
2373

被折叠的 条评论
为什么被折叠?



