双联通的tarjan算法】的更多相关文章

题目链接:传送门 思路: 题目要将使每一对草场之间都有至少两条相互分离的路径,所以转化为(一个有桥的连通图至少加几条边才能变为双联通图?) 先求出所有的桥的个数,同时将不同区块收缩成一个点(利用并查集),之后一个图变为了一颗树: 然后在统计树中度数为1的点的个数,记为cnt,则至少添加(cnt+1)/2条边. #include<iostream> #include<cstdio> #include<cstring> #include<vector> usin…
转自:https://www.zhihu.com/question/40746887/answer/88428236 连通分量有三种∶边双连通分量,点双连通分量,强连通分量,前两种属于无向图,后一种属于有向图 定义: 双连通分量又分双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图.一个无向图中的每一个极大点(边)双连通子图称作此无向图的点(边)双连通分量. 代码如下: 点双联通 struct Edge{ i…
/** 题目大意: 给你一个无向连通图,问加上一条边后得到的图的最少的割边数; 算法思想: 图的边双连通Tarjan算法+树形DP; 即通过Tarjan算法对边双连通缩图,构成一棵树,然后用树形DP求最长链,连接首尾即可;剩下的连通块即为所求答案; 算法思路: 对图深度优先搜索,定义DFN(u)为u在搜索树中被遍历到的次序号; 定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点,即DFN序号最小的节点; 则有: Low(u)=Min { DFN(u), Low(v),(u,v)为树…
http://poj.org/problem?id=1236第一问:需要几个学校存在软件,才能通过传递,使得所有的学校都有软件 用tarjan算法求出强联通分量后,将每个联通分量缩成一个点,那么问题1的答案就是入度为0的点的个数 为什么?入度为0的点,肯定不能通过其他学校传送软件给他,所以他必须存在一份软件第二问:需要加几条边,才能使得图强联通 缩点后,a为所有入度为0的点的个数,b为所有出度为0的点的个数,那么答案就是max(a,b) #include <stdio.h> #include…
定义:在一张有向图中,两个点可以相互到达,则称这两个点强连通:一张有向图上任意两个点可以相互到达,则称这张图为强连通图:非强连通图有极大的强连通子图,成为强联通分量. 如图,{1},{6}分别是一个强连通分量,{2,3,4,5}是一个强连通分量.而Tarjan算法可用于求解强连通分量. Tarjan算法: Tarjan算法是基于深度优先搜索的算法,每个强连通分量都是搜索树中的一个子树. 实现:dfn[u]表示到u节点时的标记(时间戳),low[u]表示u所能走到的节点中,点的最小的次序号(dfn…
#include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int MAXM = 500005; int n, m; int fir[MAXN], nxt[MAXM<<1], to[MAXM<<1], cnt = 1; int low[MAXN], dfn[MAXN], stk[MAXN], scc[MAXN], scccnt, indx, tmr; inline void A…
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个无向图.现在要求给这个无向图的边加上方向. 定义f(x)为从x点出发能够到达的点的数目. 使得MIN(f(x))最大. 思路: 先tarjan找边双分量,然后从点数最大的边双分量开始dfs. 就酱. 中午老妈刚给我打电话问感冒没,我说没有,晚上就发烧了 gg */ #include<bits/stdc++.h> #define N 400050 using namespace std; int ednum; struct edge{…
//白书 321页 #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<stack> using namespace std; ; vector<int>g[maxn];//g保存原始图 int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt; //pre[u]为节点u…
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被称为"点双连通分量",记为"\(v-DCC\)".无向图图的极大边双连通子图被称为"边双连通分量",记为"\(e-DCC\)". 没错,万能的图论连通性算法\(Tarjan\)又来了. 预备知识 时间戳 图在深度优先遍历的过程中,…
Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载) 转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合. 3.点连…