博主图论比较弱,搜了模版也不会用。。。所以决心学习以下tarjan算法。割点和割边的概念不在赘述,tarjan能在线性时间复杂度内求出割边。重要的概念:时间戟,就是一个全局变量clock记录访问结点的时间。一个无向图dfs会形成一个森林,当图只有一个连通分量时,就只有一棵树。由于在无向图中,除了树边...
分类:
其他好文 时间:
2015-07-19 23:05:36
阅读次数:
551
膜拜大神,链接在此:https://www.byvoid.com/zhs/blog/scc-tarjan
分类:
编程语言 时间:
2015-07-16 11:22:24
阅读次数:
115
题意:给一个n个顶点m条弧的简单有向图(无环无重边),求最多可以添加多少条弧使得添加后的有向图仍为简单有向图且不是一个强连通图,如果给的简单有向图本来就是强连通图,那么输出-1.
分析:
1.用tarjan算法求出强连通分量的个数,如果个数为1,那么输出-1,结束,否则执行2
2.假设将一些强连通分量合并为有n1个顶点简单完全图1,而将剩下的强连通分量合并为n2个顶点...
分类:
其他好文 时间:
2015-07-15 19:20:57
阅读次数:
88
题意:n个人m个单向关系,现在要通知所有的人,两个人之间联系有费用,求最小费用,处于同一个联通块的两个人之间通讯不需要花费。
思路:先建图使用Tarjan算法缩点,然后根据题意我们应该求缩点后新图的最小树形图,但是这里没必要,为什么?仔细想一想,首先题意说总是有解,所以最小树形图一定存在,那么我们对于每一个点在它的所有入边中选择一个花费最小的入边(入度为零的点除外)那么答案就是每个点的最小花费之和。这样贪心是可行的,因为在这个过程中不会出现环,很容易想到,如果出现了环那么这个环就又是一个联通块了,可是我们...
分类:
移动开发 时间:
2015-07-12 15:49:29
阅读次数:
166
题意:给一个有向图,问添加几条边可以使其强连通。思路: 按照大白书p322做。tarjan算法求强连通分量,然后缩点求各个强连通分量的出入度,答案是max(入度为0的缩点个数,出度为0的缩点个数)。 1 #include 2 #define LL long long 3 #define pii .....
分类:
其他好文 时间:
2015-07-07 22:25:14
阅读次数:
147
(1)求割点和桥的方法是tarjan算法,刘汝佳训练指南p314。 【割点】可以将两个【点双连通分量】隔开来,因为仅一个【点双连通分量】中肯定无割点,那么每两个点对都同时处于若干个简单环中才能当一个点撤掉仍然可以互通。 【桥】可以将两个【边双连通分量】隔开来,因为仅仅一个【边双连通分量】中肯定无.....
分类:
其他好文 时间:
2015-07-04 13:58:55
阅读次数:
95
题目链接:
ZOJ2588
题意:
给出一个无向的连通图,问去掉图中的哪些边,都会使图将不连通
题解思路:
割边的求解:
1、需要用到Tarjan算法的框架,首先求出dfn low 两个数组
当递归返回时 判断dfn[u]和low[v]的关系
只有当dfn[u] < low[v] 的情况下u-v是一条割边(u是关...
分类:
其他好文 时间:
2015-07-02 10:08:27
阅读次数:
107
问题描述:
给出一张连通的无向图 输出图中的所有连通分量
代码:
#include
#include
#include
#define maxn 1050
using namespace std;
struct node{
int from,to,next,vis;
int equall(node b)
{
if((from...
分类:
编程语言 时间:
2015-07-01 14:18:21
阅读次数:
167
题目链接:
POJ1523
题意:
问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分
题解:
Tarjan 算法模板题
顺序遍历整个图,可以得到一棵生成树:
树边:可理解为在DFS过程中访问未访问节点时所经过的边,也称为父子边
回边:可理解为在DFS过程中遇到已访问节点时所经过的边,也...
分类:
编程语言 时间:
2015-06-30 13:04:22
阅读次数:
286
题目传送门 1 /* 2 题意:第i个人选择第a[i]个人,问组成强联通分量(自己连自己也算)外还有多少零散的人 3 有向图强联通分量-Tarjan算法:在模板上加一个num数组,记录每个连通分量的点数,若超过1,则将连通点数相加 4 用总点数-ans则是零散的点 5...
分类:
其他好文 时间:
2015-06-23 17:22:52
阅读次数:
128