无向图边连通分量(加边使其成为边连通分量)poj3352
2014-06-30 20:07
429 查看
今天看理一下无向图的双连通分量,有点晕了,边连通分量跟点连通分量不用,以前看的刘汝佳训练指南上的只能求点连通分量。
这个跟刘汝佳的只是在那个点属于哪个连通分量上不一样,找割点找桥是一样的
加最少的边:找到边连通分量缩点以后,找到度唯一的个数n然后答案就是(N+1)/2;
这个跟刘汝佳的只是在那个点属于哪个连通分量上不一样,找割点找桥是一样的
加最少的边:找到边连通分量缩点以后,找到度唯一的个数n然后答案就是(N+1)/2;
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stack> #include<vector> using namespace std; const int maxn=1010; int n,r,x,y; struct edge { int u,v; }; int pre[maxn],low[maxn],iscut[maxn],bccno[maxn],dfs_clock,bcc_cnt; int deg[maxn]; vector<int> grid[maxn],bcc[maxn]; stack<int> s; void dfs(int u,int fa) { pre[u]=low[u]=++dfs_clock; s.push(u); int biao=0; for(int j=0; j<grid[u].size(); j++) { int v=grid[u][j]; if(!pre[v]) { dfs(v,u); low[u]=min(low[v],low[u]); } else if(pre[v]<pre[u]&&v!=fa) low[u]=min(low[u],pre[v]); } if(pre[u]==low[u]) { int j; bcc_cnt++; do { j=s.top();s.pop(); bccno[j]=bcc_cnt; } while(j!=u); } } void find_bcc() { memset(pre,0,sizeof(pre)); memset(bccno,0,sizeof(bccno)); memset(iscut,0,sizeof(iscut)); memset(low,0,sizeof(low)); dfs_clock=bcc_cnt=0; for(int i=1;i<=n;i++) if(!pre[i])dfs(i,-1); } void solve() { memset(deg,0,sizeof(deg)); for(int i=1;i<=n;i++) { int len=grid[i].size(); for(int j=0;j<len;j++) { int v=grid[i][j]; if(bccno[i]!=bccno[v])deg[bccno[i]]++; } } int ans=0; for(int i=1;i<=bcc_cnt;i++) if(deg[i]==1)ans++; printf("%d\n",(ans+1)/2); } int main() { while(scanf("%d%d",&n,&r)!=EOF) { while(r--) { scanf("%d%d",&x,&y); grid[x].push_back(y); grid[y].push_back(x); } find_bcc(); solve(); } return 0; }
相关文章推荐
- poj 3177 Redundant Paths 【无向图增加最少的边是图成为边—双连通】【tarjan求EBC + 缩点 统计度数为1的EBC】
- poj3352--旅游岛修路--双连通--无向图邻接表的容量是边数量的2倍
- POJ 3177--Redundant Paths【无向图增加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- POJ 1523 SPF(无向图连通分量求割点)
- 【数据结构笔记】5:图的邻接表结构下求无向图的连通分量
- POJ 3177--Redundant Paths【无向图添加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- POJ 3352--Road Construction【无向图增加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- POJ 1144 Network(无向图连通分量求割点)
- SDUT 1488 数据结构实验:连通分量个数(无向图的连通)
- Tarjan(无向图)有向图缩环/求(边双)强连通分量
- Critical Set(删除无向图的一个节点或者两个节点或者三个节点之后有几个连通分量?)
- 【数据结构_图_1065】无向图连通分量计算
- POJ3352(连通分量缩点)
- 图的连通性——无向图的连通分量和生成树
- 无向图的连通分量
- 无向图的连通分量
- poj 1523 求无向图所有割点以及删除割点后连通分量个数 给出详细算法思路
- 通过BFS 和 DFS两种方法找无向图的连通分量
- PAT 甲级 1021. Deepest Root(dfs:无向图的最远路径、连通分量个数)
- 算法-无向图(连通分量,是否有环和二分图)