tarjan板子整理
缩点
stack<int>q;
void tarjan(int u)
{
pre[u]=low[u]=++cnt;
q.push(u);
vis[u]=1;
for(int i=head[u];i;i=nxt[i])
{
int y=to[i];
if(!pre[y])
{
tarjan(y);
low[u]=min(low[u],low[y]);
}
else if(vis[y])
{
low[u]=min(low[u],pre[y]);
}
}
if(low[u]==pre[u])
{
num++;
int temp;
do{
temp=q.top();
q.pop();
vis[temp]=0;
id[temp]=num;//缩出来的点
sz[num]++;//每一个缩点的大小
}while(u!=temp);
}
}
割点
void tarjan(int u)
{
pre[u]=low[u]=++cnt;
int now=0;
for(int i=head[u];i;i=nxt[i])
{
int y=to[i];
if(!pre[y])
{
tarjan(y);
low[u]=min(low[u],low[y]);
if(low[y]>=pre[u])//如果u的访问时间比y最早返回的点的时间还靠前,那u被割了y一定不连通
{
now++;
if(u!=root||now>1)
vis[u]=1;//被标记的即割点
}
}
else
low[u]=min(low[u],pre[y]);
}
}
割边
void tarjan(int u,int fa)
{
pre[u]=low[u]=++cnt;
for(int i=head[u];i;i=nxt[i])
{
int y=to[i];
if(!pre[y])
{
tarjan(y,u);
low[u]=min(low[u],low[y]);
if(low[y]>pre[u])
{
if(u!=root||now>1)
vis[(u+1)>>1]=1;//无向图存了两条边
}
}
else if(y!=fa) low[u]=min(low[u],pre[y]);
}
}
点双连通分量
void tarjan(int u)
{
low[u]=pre[u]=++tim;
q.push(u);
if(u==root&&head[u]==0)
{
dcc_cnt++;
dcc[dcc_cnt].push_back(u);
return;
}//根节点特判
int cnt=0;
for(int i=head[u];i;i=nxt[i])
{
int j=to[i];
if(!pre[j])
{
tarjan(j);
low[u]=min(low[u],low[j]);
if(pre[u]<=low[j])
{
cnt++;
if(u!=root||cnt>1)vis[u]=true;
++dcc_cnt;//点双个数
int temp;
do{
temp=q.top();
q.pop();
dcc[dcc_cnt].push_back(temp);//每个点双的点
}while(temp!=j);
dcc[dcc_cnt].push_back(u);
}
}
else low[u]=min(low[u],pre[j]);
}
}
tarjan板子整理的更多相关文章
- Tarjan 【整理】
Tarjan [整理] #include<bits/stdc++.h> using namespace std; class FastIO{ /* copyright (c) dgklr ...
- bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6064 Solved: 3179[Submit][Sta ...
- $\rm{NOIp}$板子整理
怎么说呢,整理这个的目的就是为了有个简约的\(list\),方便以后查阅,复习起来不至于太吃力. 并且--好像重温一遍所有,会更有一些新的认识.这也算是对我所学的一点整理了吧. 一.并查集的两种方式 ...
- Tarjan算法整理
众所周知,tarjan是个非常nb的人,他发明了很多nb的算法,tarjan算法就是其中一个,它常用于求解强连通分量,割点和桥等.虽然具体实现的细节不太一样,但是大体思路是差不多的.先来说一下大体思路 ...
- [OI]省选前模板整理
省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int ...
- tarjan强连通分量模板(pascal)
友好城市 [问题描述]小 w 生活在美丽的 Z 国. Z 国是一个有 n 个城市的大国, 城市之间有 m 条单向公路(连接城市 i. j 的公路只能从 i 连到 j). 城市 i. j 是友好城市当且 ...
- 【最大权闭合子图 tarjan】bzoj1565: [NOI2009]植物大战僵尸
dinic+tarjan板子练手题 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其 中P ...
- 【tarjan 拓扑排序 dp】bzoj1093: [ZJOI2007]最大半连通子图
思维难度不大,关键考代码实现能力.一些细节还是很妙的. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于 ...
- tarjan缩点相关知识及代码
emmm原谅我确实是找不到不用缩点的tarjan题才会想到自学一下缩点这个东西的.. 题目没有,只能自己出数据并手动模拟... 首先看一张图(懒得画,还是看输入数据吧,劳烦自行画图..) 7 9(n个 ...
- ACM基础板子
新生赛以后就正式成为一名acmer啦 ~虽然没有打过比赛呜呜呜 要好好学算法,拿一个牌牌嘛~ 这里就记录算法学习情况,也怕自己偷懒,学一个就记录,看看长时间拖更就是在摸鱼,摸鱼和鸽子都是本质 ,加油! ...
随机推荐
- 使用OHOS SDK构建benchmark
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/google/bench ...
- 本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统
OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注. 成长计划 ...
- C语言 05 变量与常量
变量 变量就像在数学中学习的 x,y 一样,可以直接声明一个变量,并利用这些变量进行基本的运算,声明变量的格式为: 数据类型 变量名称 = 初始值;(其中初始值可以不用在定义变量时设定) = 是赋值操 ...
- C语言 01 概述
历史 C 语言是一门面向过程的计算机编程语言,于 1972 年诞生于贝尔实验室. C 语言是丹尼斯·里奇(Dennis Ritchie)以 B 语言为基础发展而来,因此他被称为 C 语言之父. C 语 ...
- SpringBoot2.x<<深入浅出>>
书籍推荐 书名:深入浅出Spring Boot 2.x 作者:杨开振 出版社:人民邮电出版社 demo: https://gitee.com/threenut/spring-boot 讲的很细致, 把 ...
- Lite Actor:方舟Actor并发模型的轻量级优化
原文:https://mp.weixin.qq.com/s/8biIBddpy6GKgakazg1vcg,点击链接查看更多技术内容. 并发模型是用来实现不同应用场景中并发任务的编程模型,通过合理地使用 ...
- TypeScript 中泛型的理解?应用场景?
一.是什么 泛型程序设计(generic programming)是程序设计语言的一种风格或范式 泛型允许我们在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型 ...
- iframe跨域,获取iframe中元素
1.需求让iframe嵌入页面,并且没有滚动条,也就是相当于两个页面拼接在一起 跨域解决,通过框架配置代理 proxy: { '/medical': { target: 'https://exampl ...
- 真正的HTAP对用户和开发者意味着什么?
简介: Gartner 2016 年首次提出 HTAP(Hybrid Transaction / Analytical Processing,混合事务分析处理)并给出明确的定义:即同时支持 OLTP ...
- 【开发者成长】喧哗的背后:Serverless 的挑战
作者 | 许晓斌 阿里云高级技术专家,目前负责阿里集团 Serverless 研发运维平台建设,<Maven 实战>作者,曾经是 Maven 中央仓库的维护者. 导读:本文作者作为阿里集 ...