缩点

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板子整理的更多相关文章

  1. Tarjan 【整理】

    Tarjan [整理] #include<bits/stdc++.h> using namespace std; class FastIO{ /* copyright (c) dgklr ...

  2. bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6064  Solved: 3179[Submit][Sta ...

  3. $\rm{NOIp}$板子整理

    怎么说呢,整理这个的目的就是为了有个简约的\(list\),方便以后查阅,复习起来不至于太吃力. 并且--好像重温一遍所有,会更有一些新的认识.这也算是对我所学的一点整理了吧. 一.并查集的两种方式 ...

  4. Tarjan算法整理

    众所周知,tarjan是个非常nb的人,他发明了很多nb的算法,tarjan算法就是其中一个,它常用于求解强连通分量,割点和桥等.虽然具体实现的细节不太一样,但是大体思路是差不多的.先来说一下大体思路 ...

  5. [OI]省选前模板整理

    省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int ...

  6. tarjan强连通分量模板(pascal)

    友好城市 [问题描述]小 w 生活在美丽的 Z 国. Z 国是一个有 n 个城市的大国, 城市之间有 m 条单向公路(连接城市 i. j 的公路只能从 i 连到 j). 城市 i. j 是友好城市当且 ...

  7. 【最大权闭合子图 tarjan】bzoj1565: [NOI2009]植物大战僵尸

    dinic+tarjan板子练手题 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其 中P ...

  8. 【tarjan 拓扑排序 dp】bzoj1093: [ZJOI2007]最大半连通子图

    思维难度不大,关键考代码实现能力.一些细节还是很妙的. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于 ...

  9. tarjan缩点相关知识及代码

    emmm原谅我确实是找不到不用缩点的tarjan题才会想到自学一下缩点这个东西的.. 题目没有,只能自己出数据并手动模拟... 首先看一张图(懒得画,还是看输入数据吧,劳烦自行画图..) 7 9(n个 ...

  10. ACM基础板子

    新生赛以后就正式成为一名acmer啦 ~虽然没有打过比赛呜呜呜 要好好学算法,拿一个牌牌嘛~ 这里就记录算法学习情况,也怕自己偷懒,学一个就记录,看看长时间拖更就是在摸鱼,摸鱼和鸽子都是本质 ,加油! ...

随机推荐

  1. Visual Studio快捷键总览,推荐VS+Resharper实现高效开发

    VS2022之后,其实还挺好用的,但个人还是习惯VS+Resharper的强强组合,尤其是Ctrl+N快捷键的全局搜,比VS自带的Ctrl+T好用太多了,Ctrl+B还能直接查看反编译之后的dll的方 ...

  2. HDC2021技术分论坛:鸿蒙智联平台——智能硬件伙伴的最佳拍档

    作者:chengjie,鸿蒙智联生态服务平台运营经理 您在产品开发和运营过程中是否遇到过以下问题: 产品开发千头万绪,无从下手?产品上市后不能清晰地了解消费者的使用情况?用户的意见无法及时传递和答复, ...

  3. Causal Inference理论学习篇-Tree Based-Causal Tree

    Tree-Based Algorithms Tree-based这类方法,和之前meta-learning 类的方法最明显的区别是: 这类方法把causal effect 的计算显示的加入了到了树模型 ...

  4. i-MES生产制造管理系统-老化时间管控

    在生产过程中,产品的可靠性是影响其性能和寿命的关键因素,因此提高产品的可靠性是十分必要的,而老化测试是提高产品可靠性的重要手段之一,老化的时间随着产品不同而变化,因此老化时间管控变得尤为重要! 在ME ...

  5. steam社区留言红小作文模板

    steam社区留言红小作文模板 Dear steam: Im a steam user which most play csgo.i saw i had be banned in steam comm ...

  6. 力扣1768(java&python)-交替合并字符串(简单)

    题目: 给你两个字符串 word1 和 word2 .请你从 word1 开始,通过交替添加字母来合并字符串.如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾. 返回 合并后的 ...

  7. 链栈的实现 C语言/C++

    堆栈的链式存储C/C++实现--链栈 与顺序栈相比,链栈的优点在于不存在栈满上溢的问题.链栈通常使用单链表实现,进栈.出栈操作就是在单链表表头的 插入.删除操作.用单链表实现链栈时,使用不带头结点的单 ...

  8. SKG 渠道中台借助 SAE + 大禹打造云原生 DevOPS,提效 60%

    简介: 新零售标杆 SKG 全面拥抱 Serverless,敏捷交付! 作者:陈列昂(SKG).昕辰.龙琛.黛忻 项目背景 未来穿戴健康科技股份有限公司(SKG)是一家专注为个人与家庭提供智能可穿戴健 ...

  9. T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践

    简介: 阿里云工程师李伟男和郭成在 KVM Forum 2020 上详细介绍了阿里云 KVM 虚拟机创建及启动时间优化的具体技术实现,本文根据其演讲整理而成. 对于云计算用户来说,过长的 KVM 虚拟 ...

  10. [GPT] 使用 nodejs的 puppeteer 库使用完关闭后,linux上面有很多 chrome 进程

      在使用 Node.js 的 Puppeteer 库时,如果你在使用完后关闭了浏览器,但在 Linux 上仍然存在很多 Chrome 进程,可能是因为没有正确地关闭所有相关的进程. 可以尝试以下方法 ...