无向图求双连通分量以及桥
来源:互联网 发布:excel 2013数据有效性 编辑:程序博客网 时间:2024/06/04 20:39
<code>
void pbc_dfs(int u, int parent) {//求双连通分量中的边 dfn[u] = low[u] = dfn_now++; foreach e in adjacent list [u] { v = e->v; if (v != parent && dfn[v] < dfn[u]) { stack.push(Edge(u, v)); if (0 != dfn[v])low[u] = min(low[u], dfn[v]); else { pbc_dfs(v, u); low[u] = min(low[u], low[v]); if (low[v] >= dfn[u]) { // u is a cut point //此处会枚举所有的双连通分量 do { Edge edg = stack.pop(); ...(some operation) } while(edg is not uv); ++component_id; } } } }}
</code>
<code>
int dfn[M],low[M],index;void tarjan(int u,int parent){dfn[u]=low[u]=index++;//应当小心index,可能会出现报错的情况for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].v;if(dfn[v]!=0&&v!=pa){//如果v为u的父亲的话,那么就没意思了。可以逻辑一下low[u]=min(low[u],dfn[v]);}else if(dfn[v]==0){tarjan(v,u);low[u]=min(low[v],low[u]);if(dfn[u]<low[v]){//cout<<" == "<<u<<v<<endl;match(u,v);}}}}void solve(int n){memset(dfn,0,sizeof(dfn));memset(fa,-1,sizeof(fa));index=1;for(int i=1;i<=n;i++){if(dfn[i]==0){//可能整张图本身就不连通,而是由多个联通块组成tarjan(i,-1);}}}
</code>
- 无向图求双连通分量以及桥
- 求无向图的 边-双连通分量
- poj 3352 求双连通分量 (无向图)
- 无向图双连通分量
- poj3352[无向图双连通分量]
- 无向图双连通分量uva1108
- 无向图的双连通分量
- 【无向图的双连通分量】
- 无向图的双连通分量
- 无向图双连通分量
- 无向图的双连通分量
- POJ-3352-无向图的割顶和桥-求边-双连通分量
- poj3177 Redundant Paths 无向图 双连通分量 桥
- 无向图的桥 双连通分量
- POJ - 3352 无向图的割和桥以及双连通分量
- 无向图 边双联通 求桥 + 求 EBC + 缩点 模版 (EBC表示边-双连通分量)
- poj 3352(无向图的双连通分量)
- 无向图双连通分量(ZZ)
- 黑马程序员_环境变量总结(一)
- 常用DOS命令
- Java泛型
- 第12章 性能
- 成绩单
- 无向图求双连通分量以及桥
- Solr 将数据库中table中数据导入到索引
- Cocos2d-x win7 + vs2010 配置图文详解
- IE双倍浮动边界BUG现象
- js弹出层包含flash 不能关闭隐藏解决方法
- 虚拟串口与PROTUES软件的仿真
- 黑马程序员—面向对象(扩展)
- Java NIO使用及原理分析 (一)
- 校赛