-
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 - 无向图缩点-建边双联通图
最新推荐文章于 2020-04-29 15:56:41 发布