tarjan全家桶
tarjan 全家桶
- 关于tarjan 它太强了 CCCOrz
dfs树&low
dfs树:在图上做不重复经过同一点的dfs,经过的边与点形成一棵树。于是图上所有点都被这棵树包含,一部分边被包含。称被包含的点叫树边,其他边叫回边。整个图就是dfs树,由于是由dfs得到。所以dfs树有非常强的性质,所有回边一定是从一点开始,到它的一个祖先,也就是说两棵没有交集的子树之间一定没有边相连。
dfn:dfn[now]表示now点的dfn序。
low:在做tarjan算法时通常需要开一个low数组,low的定义在处理不同问题时可能略有区别。大体为low[rt]表示以rt为根的子树中经过树边和一条回边能到达的dfn最小的点的dfn。
其实理解tarjan的最好办法就是感性
强连通分量
void tarjan(int now)
{
dfn[now]=low[now]=++tot;
s.push(now);in[now]=1;
for(int i=head[now];i;i=nxt[i])
{
if(!dfn[to[i]])
tarjan(to[i]),low[now]=min(low[to[i]],low[now]);
else if(in[to[i]])
low[now]=min(dfn[to[i]],low[now]);
}
if(low[now]==dfn[now])
{
color++;
while(in[now])
{
in[s.top()]=0;
col[s.top()]=color;
ac[color]+=a[s.top()];
s.pop();
}
}
}
割点
void tarjan(int now,int fa)
{
low[now]=dfn[now]=++cnt;
int son=0;
for(int i=head[now];i;i=nxt[i])
{
int v=to[i];
if(!dfn[v])
{
tarjan(v,now);
low[now]=min(low[now],low[v]);
if(low[v]>=dfn[now]&&fa!=now)
is[now]=1;
son++;
}
else low[now]=min(low[now],dfn[v]);
}
if(fa==now&&son>=2)
is[now]=1;
}
双连通分量(圆方树)
void tarjan(int now)///建立圆方树
{
dfn[now]=low[now]=++dfc;
stk[++tp]=now;
++tot;
for(int i=0;i<e[now].size();i++)
{
int to=e[now][i];
//cout<<"qwq"<<' '<<now<<' '<<to<<endl;
if(!dfn[to])
{
//cout<<"in"<<' '<<to<<endl;
tarjan(to);
//cout<<"out"<<' '<<now<<' '<<to<<' '<<low[to]<<endl;
low[now]=min(low[now],low[to]);
if(low[to]==dfn[now])///now就是桥
{
cnt++;///方点+1
for(int x=0;x!=to;--tp)///由于桥可能同时在多个双连通分量内,所以now不出栈
{
x=stk[tp];
v[cnt]++;
t[cnt].push_back(x);
t[x].push_back(cnt);///连接方点和圆点
}
t[now].push_back(cnt);
t[cnt].push_back(now);
v[cnt]++;
}
}
else ///由于是双向边,此时to[i]必然是i的父节点,根据low的定义无需考虑to[i]。
low[now]=min(low[now],dfn[to]);
}
}
tarjan全家桶的更多相关文章
- 【题解】Uoj#30 Tourist(广义圆方树+树上全家桶)
[题解]Uoj#30 Tourist(广义圆方树+树上全家桶) 名字听起来很霸气其实算法很简单.... 仙人掌上的普通圆方树是普及题,但是广义圆方树虽然很直观但是有很多地方值得深思 说一下算法的流程: ...
- iOS Keychain钥匙串,应用间数据共享打造iOS上的全家桶
Demo先行:https://github.com/rayshen/GIKeychainGroupDemo 该demo里有2个工程,你先运行任何一个会存储一个值,再运行另一个会访问之前的app存储的值 ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- vue全家桶(Vue+Vue-router+Vuex+axios)(Vue+webpack项目实战系列之二)
Vue有多优秀搭配全家桶做项目有多好之类的咱就不谈了,直奔主题. 一.Vue 系列一已经用vue-cli搭建了Vue项目,此处就不赘述了. 二.Vue-router Vue的路由,先献上文档(http ...
- 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统
很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...
- Vuejs实例-00Vuejs2.0全家桶结合ELementUI制作后台管理系统
Vuejs2.0全家桶结合ELementUI制作后台管理系统 0: 系统环境的介绍 1: Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目 2: Vuejs实例-02Vue.js项目集 ...
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- 从零开始系列之vue全家桶(3)安装使用vuex
什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...
- 从零开始系列之vue全家桶(1)安装前期准备nodejs+cnpm+webpack+vue-cli+vue-router
写在前面: 什么是全家桶? 包含了vue-router(http://router.vuejs.org),vuex(http://vuex.vuejs.org), vue-resource(https ...
随机推荐
- 如何把Electron做成一个Runtime,让多个应用共享同一个Electron
这个问题涉及到很多知识,而且要想把这个Runtime做好很绕. 下面我就说一下我的思路:(以下内容以Windows平台为基础,Mac平台和Linux平台还得去调查一下,才能确定是否可行) 首先,我们先 ...
- c++内存分布之纯虚函数
关于 本文演示环境:VS2017+32位程序. 纯虚函数是一种特殊的虚函数.可以预测到:虚函数的结论同样适用纯虚函数,但是纯虚函数是一种特殊的存在,还是看看实际结果. 代码写的不够规范: 因为任何带虚 ...
- win10使用照片查看器查看图片
1.关于 演示环境: win10 1909 2.习惯win7的照片查看器 如果你习惯使用win7的照片查看器在win10查看照片,可以通过下面的注册表代码实现.方法:1.创建 后缀名为 .reg的文件 ...
- 【LeetCode】338. Counting Bits 解题报告(Python & Java & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目描述 Given a non negati ...
- Understanding and Improving Fast Adversarial Training
目录 概 主要内容 Random Step的作用 线性性质 gradient alignment 代码 Andriushchenko M. and Flammarion N. Understandin ...
- Zookeeper集群安装Version3.5.1
Zookeeper集群安装,基于版本3.5.1, 使用zookeeper-3.5.1-alpha.tar.gz安装包. 1.安装规划 zookeeper集群模式,安装到如下三台机器 10.43.159 ...
- IIS部署php项目——discuz论坛
1.安装CgiModule模块 首先,IIS要部署php项目,需要CgiModule模块的支持,所以首先我们要确认这个模块是否存在 打开IIS管理器: 我这里是存在的: 如果不存在,可以自行在控制面板 ...
- 【17MKH】我在框架中对.Net依赖注入的扩展
说明 依赖注入(DI)是控制反转(IoC)的一种技术实现,它应该算是.Net中最核心,也是最基本的一个功能.但是官方只是实现了基本的功能和扩展方法,而我呢,在自己的框架 https://github. ...
- CSS基础 BFC的使用方法
BFC的作用和创建1.html标签是BFC盒子2.浮动元素是BFC盒子3.行内块元素是BFC盒子4.overflow属性值不为visible,如:auto.hidden...作用:1.清除浮动: 2. ...
- 初识python:hello world 仪式感
python print 函数(在python中,不区分 ' ' 和 " "): print('hello world') 或者 print("hello wrold& ...