【关节点+桥】关节点和桥模板 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( ...
随机推荐
- 重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息
原文:重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息 [源码下载] 重新想象 Windows 8 Store ...
- 玩转Web之servlet(五)---- 怎样解决servlet的线程安全问题
servlet默认是存在线程安全问题的,但是说白了,servlet的线程安全问题实际上就是多线程的线程安全问题,因为servlet恰巧是一个多线程才会出现安全性问题. 浏览器每次通过http协议去提交 ...
- logback与Spring、SpringMVC结合使用教程(转) logback good
摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <gro ...
- JAVA学习JSTL与EL
一.基础 1.EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法 2.JSTL:(JSP Standard Tag Library)jstl标 ...
- 懒与馋的平衡:餐饮O2O市场广阔,发展不易
餐饮行业是众多行业中O2O起步较早的,现在方兴未艾的团购站点中最先涉足的领域就有餐饮版块.长时间的合作推广,很多餐饮商家已经从中尝到甜头,可以说餐饮行业市场基础培育的比較好,所以餐饮O2O 已经是大势 ...
- robot framework 使用三:他们主动浏览器的兼容性
robot framework 浏览器兼容性测试 上图中黄色圈的地方默认什么都不写,是firefox浏览器.写上ie就是ie浏览器了 firefox最新版本号即可,ie须要设置: 1. IE选项设置的 ...
- Memcahce(MC)系列(三)Memcached它PHP转让
由PHP转让Memcahce,首先,需要在server安装Memcache,如何安装Memcache这不是本文的重点, 大约memcache安装,谁的朋友有兴趣,请参阅这里:http://blog.c ...
- Java线(一个):线程安全的和不安全
当我们看JDK API什么时候,总是找一些类描述说:,线程安全或线程安全,例如StringBuilder在,么一句,"将StringBuilder 的实例用于多个线程是不安全的.假设须要这种 ...
- ServletContext加入和访问
(1)关于ServletContext认识: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc=/font/5a6L5L2T/f ...
- dapper+linq+json+ztree构建树
dapper获取实体的集合 /// <summary> /// 获取表tb_sys_zhuowei所有数据 /// </summary> public IEnumerable& ...