图论总结(4)有向图的强连通分量
来源:互联网 发布:朱永棠网络电影 编辑:程序博客网 时间:2024/06/03 12:30
有向图的强连通分量:有向图G中,如果有两个顶点间至少存在一条路径,称两个顶点强连通(stringly connected),简称SCC。
如果有向图G的每个顶点都强连通,则称G是一个强连通图。
非强连通图的极大强连通子图,称为强连通分量。
蓝书上给了两种算法:
一.Kosaraju算法:
按照SCC图拓扑排序的逆序进行遍历。先正序遍历的到拓扑排序,再构造G的反向图G2(所有边相反),最后按拓扑排序的逆序进行遍历。
模板:
vector<int>G[maxn],G2[maxn];vector<int>s;int vis[maxn],sccno[maxn],scc_cnt;void dfs1(int u){if(vis[u])return ;vis[u]=1;for(int i=0;i<G[u].size();i++)dfs1(G[u][i]);s.push_back(u);}void dfs2(int u){if(sccno[u])return ;sccno[u]=scc_cnt;for(int i=0;i<G2[u].size();i++)dfs2(G[u][i]);}void find_scc(int n){scc_cnt=0;s.clear();memset(sccno,0,sizeof(sccno));memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)if(!vis[i])dfs1;for(int i=n-1;i>=0;i--)if(!sccno[s[i]]){scc_cnt++;dfs2[s[i]];}}
二.tarjan算法:
定义pre(u)数组为节点u的次序编号(时间戳)。low(u)为u或u的子树能够追溯到的最早节点的次序号。
由定义可以得出:
low(u)=min(pre(v),low(u))v为u的子树且v!=fa;
当DFN(u)=low(u)时,以u为根的搜索子树上所有节点是一个强连通分量。
模板:
vector<int>G[maxn];int pre[maxn],low[maxn],sccno[maxn];int dfs_clock,scc_cnt;stack<int>s;void dfs(int u){pre[u]=low[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);low[u]=min(low[u],low[v]);}else if(!sccno[v]){low[u]=min(low[u],pre[v]);}if(low[u]==pre[u]){scc_cnt++;for(;;){int x=s.top();s.pop();sccno[x]=scc_cnt;if(x==u)break;}}}}void find_scc(int n){dfs_clock=scc_cnt=0;memset(sccno,0,sizeof(sccno));memest(pre,0,sizeof(pre));for(int i=0;i<n;i++)if(!pre[i])dfs(i);}
个人觉得第一种要好写一点。
(要开学了,感觉图论总结了就没时间复习其他了,之后总结就精简点了。。。)阅读全文
0 0
- 图论总结(4)有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量
- 有向图的强连通分量(tarjan算法)
- 有向图的强连通分量(Tanjan)
- CCF201509-4 高速公路(有向图强连通分量)
- 有向图强连通分量Tarjan
- 关于小米6.0以上系统手机动态获取权限问题
- (博弈)Fliping game--HDOJ
- sql关键字过滤C#方法
- ssh框架中遇到的问题
- 云课堂入门整理---计算机网络-传输层(一)
- 图论总结(4)有向图的强连通分量
- xlistview的多条目展示
- linux 打开防火墙端口
- thread中join和detach的区别
- 常见的算法
- 两个乒乓球队进行比赛,各出三人。 甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
- Matplotlib
- Intellij IDEA 2017 debug断点调试技巧与总结详解篇
- Ansible安装