【关节点+桥】关节点和桥模板 Tarjan
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1e5, M = 1e5;
struct Edge {
int v, next, idx;
Edge(){}
Edge(int _v, int _next, int _idx):
v(_v), next(_next), idx(_idx){}
}e[M];
int dfn[N], deep, head[N], tot;
bool iscut[N], isbri[M]; void __init__()
{
tot = deep = 0;
memset(head, -1, sizeof(head));
memset(dfn, 0, sizeof(dfn));
memset(iscut, 0, sizeof(iscut));
memset(isbri, 0, sizeof(isbri));
} void add(int u, int v, int idx)
{
e[tot] = Edge(v, head[u], idx);
head[u] = tot++;
}
//lowi:i及其子孙通过回边所能走到的最早的祖先的dfn值
int dfs(int u, int fa)
{
int lowu = dfn[u] = ++deep;//打上时间戳,并初始化low值
int son = 0;//儿子数为0
for(int i = head[u]; ~i; i = e[i].next) {
int v = e[i].v;
if(!dfn[v]) {//下一个点指向儿子
son++;
int lowv = dfs(v, u);
lowu = min(lowu, lowv);
if(lowv >= dfn[u]) iscut[u] = 1;//没有回边,是关节点
if(lowv > dfn[u]) isbri[e[i].idx] = true;
}
else if(dfn[v] < dfn[u] && v != fa)//指向爷爷,发现回边
lowu = min(lowu, dfn[v]);//利用回边来更新low值
}
if(fa == -1 && son == 1) iscut[u] = 0;//仅仅有1个儿子的根结点不是割顶
return lowu;
} int main()
{
__init__();
return 0;
}
【关节点+桥】关节点和桥模板 Tarjan的更多相关文章
- 求无向图的割点和桥模板(tarjan)
一.基本概念 1.桥:若无向连通图的边割集中只有一条边,则称这条边为割边或者桥 (离散书上给出的定义.. 通俗的来说就是无向连通图中的某条边,删除后得到的新图联通分支至少为2(即不连通: 2.割点:若 ...
- 模板——Tarjan
#include <cstdio> #include <cstring> #include <iostream> #include <vector> u ...
- [模板]tarjan求强连通分量
大约是今年4月学的算法了,后来5月的时候做题还写了一个退化的tarjanQAQ. 时间复杂度:O(n+m) 用途:有向图缩环 #include<set> #include<cmath ...
- 算法模板——Tarjan强连通分量
功能:输入一个N个点,M条单向边的有向图,求出此图全部的强连通分量 原理:tarjan算法(百度百科传送门),大致思想是时间戳与最近可追溯点 这个玩意不仅仅是求强连通分量那么简单,而且对于一个有环的有 ...
- [模板] tarjan/联通分量/dfs树
//to update 边的分类 有向图边分为四类: 树边, 前向边, 返祖边(后向边), 横叉边. 上图: 判定 有向图 对图进行dfs, 不考虑已经遍历过的点, 得到dfs序 \(dfn_i\). ...
- [模板]tarjan缩点+拓扑排序
题目:给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 题目简述:先t ...
- hdu2586(lca模板 / tarjan离线 + RMQ在线)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意: 给出一棵 n 个节点的带边权的树, 有 m 个形如 x y 的询问, 要求输出所有 x, ...
- 模板—tarjan求割边
int dfn[MAXN],low[MAXN],cnt; void tarjan(int x,int edg) { low[x]=dfn[x]=++cnt; for(int i=f(x);i;i=n( ...
- 模板—tarjan求割点
int dfn[MAXN],low[MAXN],cnt,root; bool iscut[MAXN]; void tarjan(int x) { dfn[x]=low[x]=++cnt; ; for( ...
随机推荐
- 从最大似然到EM算法浅解
从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...
- Spring它不支持依赖注入static静态变量
在springframework在,我们不能@Autowired静态变量,制作spring bean,例如,没有那么: @Autowired private static YourClass your ...
- #define XXX do{ XXX } while(0) 为什么使用
#define XXX do{ XXX } while(0) 为什么使用 时常会遇到一个非常"奇怪的宏定义", rt.(欧西巴...思考不够深刻啊, 皮鞭, 啪啪啪) 近期又遇到这 ...
- hdu2377Bus Pass(构建更复杂的图+spfa)
主题链接: 啊哈哈,点我点我 思路: 题目是给了非常多个车站.然后要你找到一个社区距离这些车站的最大值最小..所以对每一个车站做一次spfa.那么就得到了到每一个社区的最大值,最后对每一个社区扫描一次 ...
- VS2015企业版本(安装包+key)
VS2015中文企业版: http://pan.baidu.com/s/1eQtWvNs VS2015英文企业版: http://pan.baidu.com/s/1i3gZaVN —————————— ...
- 使用GDB在远程开发机上调试
由于一些环境限制,很多学生很可能需要在开发机器上调试.但是,由于对计算机资源的开发限制.在本地的直接机的发展GDB环境配置问题已经成为,其实,我们可以利用这段时间GDB自带gdbserver工具将能够 ...
- Peter's Hobby
主题链接 题意: 题意比較麻烦.. .n天,给出每天的叶子的一种状态(Dry , Dryish , Damp and Soggy),最有可能出现的天气序列(Sunny, Cloudy and Rain ...
- HDU 2012 素性
素性 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- IIS7和IIS7.5备份和还原的方法
windows2008的iis配置备份和iis6不同,在iis7中没有了6原来的保存配置xml的选项,而采用的是dos命令来进行iis7的备份.以下是win2008上iis7备份的方法. 首先打开CM ...
- Java的socket服务UDP协议
练习1 接收类 package com.socket.demo; import java.io.IOException; import java.net.DatagramPacket; import ...