【模板】双连通分量和强连通分量
来源:互联网 发布:python和php哪个简单 编辑:程序博客网 时间:2024/05/08 07:07
双连通分量
#include<cstdio>#include<cstring>#include<vector>#define maxn 10005#define maxm 1000005using namespace std;struct Edge{int u,v;}e[maxm];int n,m,tot,stamp,dfn[maxn],low[maxn],bccno[maxn],bcc_cnt;vector<int>vec[maxn];bool g[maxn][maxn],isbridge[maxm];void tarjan(int index,int fa){ int tmp; dfn[index]=low[index]=++stamp; for(int i=0;i<vec[index].size();i++){ tmp=e[vec[index][i]].v; if(!dfn[tmp]){ tarjan(tmp,index); low[index]=min(low[index],low[tmp]); if(low[tmp]>dfn[index]) isbridge[vec[index][i]]=isbridge[vec[index][i]^1]=1; } else if(dfn[tmp]<dfn[index] && tmp!=fa){ low[index]=min(low[index], dfn[tmp]); } }}void dfs(int index){ dfn[index]=1; bccno[index]=bcc_cnt; for(int i=0;i<vec[index].size();i++){ int tmp=vec[index][i]; if(isbridge[tmp]) continue; if(!dfn[e[tmp].v]){ dfs(e[tmp].v); } }}void find_ebcc(){ bcc_cnt=stamp=0; memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(isbridge,0,sizeof(isbridge)); memset(bccno,0,sizeof(bccno)); for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i, -1); memset(dfn,0,sizeof(dfn)); for(int i=1;i<=n;i++){ if(!dfn[i]){ bcc_cnt++; dfs(i); } } }void Addedges(int u,int v){ e[++tot].u=u;e[tot].v=v; vec[u].push_back(tot); swap(u,v); e[++tot].u=u;e[tot].v=v; vec[u].push_back(tot);}
强连通分量
#include<bits/stdc++.h>using namespace std;const int maxn=105;vector<int>G[maxn];int n,m,pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;stack<int>S;void dfs(int u){ pre[u]=lowlink[u]=++dfs_clock; S.push(u); for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(!pre[v]){ dfs(v); lowlink[u]=min(lowlink[u],lowlink[v]); }else if(!sccno[v]){ lowlink[u]=min(lowlink[u],pre[v]); } } if(lowlink[u]==pre[u]){ scc_cnt++; for(;;){ int x=S.top();S.pop(); sccno[x]=scc_cnt; if(x==u) break; } } return ;}void find_scc(int n){ dfs_clock=scc_cnt=0; memset(sccno,0,sizeof(sccno)); memset(pre,0,sizeof(pre)); for(int i=1;i<=n;i++){ if(!pre[i]) dfs(i); } return ;}void Addedges(int u,int v){ G[u].push_back(v);}
0 0
- 【模板】双连通分量和强连通分量
- 浅谈双连通分量、强连通分量(模板)
- 强连通分量与双连通分量
- 强连通分量与双连通分量
- 浅谈双连通分量、强连通分量
- 浅谈双连通分量、强连通分量
- 强连通分量 & 割点/桥 & 点/边双连通分量 [模板]
- 强连通分量与双连通分量(重新构图)
- Tarjan算法,强连通分量,双连通分量详解
- 强连通分量_双连通分量(转载)
- 连通分量模板:tarjan: 求割点 && 桥 && 缩点 && 强连通分量 && 双连通分量 && LCA(最近公共祖先)
- 连通分量 无向图的割顶和桥 无向图的双连通分量 有向图的强连通分量
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
- 提高「进度条」用户体验的设计技巧
- 常见的字符串函数之strlen函数,strcpy函数,strcat函数的实现;
- 上机5
- [POJ1948]Triangular Pastures(背包dp)
- [笔记] android/iOS自动化测试神器Appium小结
- 【模板】双连通分量和强连通分量
- scanf与printf中的*妙用
- Linux 网络配置
- 二叉树采用三叉链表的存储结构,不借助栈的非递归中序遍历
- 制作网络畅销排行榜 HTML 关键代码
- git bash 下怎么复制一个目录到上一级目录包括隐藏文件
- 《JS高级程序设计》【1~3】
- Git进阶
- 剑指offer(12)-栈的压入弹出序列