博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tarjan求强联通分量+缩点
阅读量:4598 次
发布时间:2019-06-09

本文共 1886 字,大约阅读时间需要 6 分钟。

提到Tarjan算法就不得不提一提Tarjan这位老人家

Robert Tarjan,计算机科学家,以LCA、强连通分量等算法闻名。他拥有丰富的商业工作经验,1985年开始任教于普林斯顿大学。Tarjan于1986年获得图灵奖。并于1994年当选为ACM院士。

Tarjan其他奖项包括:
奈望林纳奖信息科学(1983第一个获奖者)
国家科学院的研究倡议奖 (1984)
巴黎Kanellakis奖-理论与实践( ACM1999)
帕斯卡奖章数学与计算机科学( 欧洲科学院2004)
加州理工学院杰出校友奖( 美国加州技术研究所2010)

综上所述————Tarjan太强辣!


不扯**了,接下来让我们进入正题

Tarjan求强联通分量算法顾名思义,可以用来求强联通分量(这不是废话吗),同时它还可以用来缩点。所谓缩点,就是将一个强联通分量糅合成一个点,然后将强联通分量里每个个点的信息都整合到这个点里,形成一个超级点

o_6f061d950a7b0208fb19ab4c63d9f2d3562cc84f.jpg

如图所示,1、2、3、4是一个强连通分量,4和5自己是一个强连通分量,那么我们就可以把这张图变成下边这张图

o_360%e6%88%aa%e5%9b%be20180603213341564.jpg

点1这个集合就包含了原来的1、2、3、4四个点,点2是原来的点5,点3是原来的点6,这样我们就可以简化DAG,从而更方便的进行一些操作

例题

  • 板子题,没什么好说的,直接上代码
#include
#include
#include
#include
using namespace std;int read(){ int k=0; char c=getchar(); for(;c<'0'||c>'9';) c=getchar(); for(;c>='0'&&c<='9';c=getchar()) k=(k<<3)+(k<<1)+c-48; return k;}struct zzz{ int t,nex;}e[50001*2]; int head[10001],tot;inline void add(int x,int y){ e[++tot].t=y; e[tot].nex=head[x]; head[x]=tot;}int dfn[10001],deep,low[10001],vis[10001],s[100001],tail;int col,colnum[10001],belong[10001];//Tarjan缩点主体void tarjan(int f){ dfn[f]=low[f]=++deep; s[++tail]=f; vis[f]=1; for(int i=head[f];i;i=e[i].nex){ int to=e[i].t; if(!dfn[to]){ tarjan(to); low[f]=min(low[f],low[to]); } else{ if(vis[to]) low[f]=min(low[f],dfn[to]); } } if(dfn[f]==low[f]){ col++; int v=0; do { v=s[tail--]; vis[v]=0; colnum[col]++; belong[v]=col; }while(v!=f); }}int ans;int main(){ int n=read(),m=read(); for(int i=1;i<=m;i++){ int x=read(),y=read(); add(x,y); } for(int i=1;i<=n;i++){ if(!dfn[i]) tarjan(i); } for(int i=1;i<=n;i++) if(colnum[i]>1) ans++; cout<

转载于:https://www.cnblogs.com/wxl-Ezio/p/9144861.html

你可能感兴趣的文章
【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践
查看>>
Ubuntu16.04下配置ssh免密登录
查看>>
实验二 2
查看>>
will-change属性
查看>>
android学习笔记54——ContentProvider
查看>>
Unity3d android开发之触摸操作识别-双击,滑动去噪处理
查看>>
Custom view * is not using the 2- or 3-argument View constructors; XML attributes will not work
查看>>
模型选择准则
查看>>
安卓动态增加按钮
查看>>
iOS7程序后台运行
查看>>
maven+testng+reportng的pom设置
查看>>
IT telephone interview
查看>>
gitlab安装配置
查看>>
ps载入画笔
查看>>
悲怆:IT人的一声叹息->一个程序员的自白[转帖]
查看>>
[SpringMVC]自定义注解实现控制器访问次数限制
查看>>
日记(序)
查看>>
A == B ?
查看>>
洛谷P3763 [Tjoi2017]DNA 【后缀数组】
查看>>
GSM模块_STM32实现GPRS与服务器数据传输经验总结
查看>>