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 ...
随机推荐
- 奇怪的现象,打印出来可以见到数据,在右边看不到数据,放到list里在页面上也显示不了数据
- Java高级:条件队列与同步器Synchronizer的原理+AQS的应用
14.构建自定义的同步工具 类库中包含了许多存在状态依赖性的类,例如FutureTask,Semaphore和BlockingQueue等.在这些类中的一些操作中有着基于状态的前提条件,例如,不能从一 ...
- 【九度OJ】题目1207:质因数的个数 解题报告
[九度OJ]题目1207:质因数的个数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1207 题目描述: 求正整数N(N& ...
- 1021 - Painful Bases
1021 - Painful Bases PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB As ...
- 1017 - Brush (III)
1017 - Brush (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Sami ...
- 一站式元数据治理平台——Datahub入门宝典
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为新一代的元数据管理平台,Datahub在近一年的时间里发展迅猛,大有取代老牌元数据管理工具Atlas之势.国内Datahub ...
- 【嵌入式】keil不识别野火高速dap的问题
解决方法:https://www.firebbs.cn/thread-28093-1-1.html
- Scale-Invariant Error
目录 概 主要内容 代码 Eigen D., Puhrsch C. and Fergus R. Depth Map Prediction from a Single Image using a Mul ...
- Adversarial Defense by Restricting the Hidden Space of Deep Neural Networks
目录 概 主要内容 Mustafa A., Khan S., Hayat M., Goecke R., Shen J., Shao L., Adversarial Defense by Restric ...
- Two pointer方法
I.何为Two pointer 用两个哨兵指向两个序列,通过利用序列本身的性质减少遍历次数,来更快得解决一些归并问题 基本问题 给定一个正整数递增序列和一个正整数M,求序列中两个不同位置的a,b使得a ...