图的连通性问题包括:1、强连通分量。2、最小点基和最小权点基。3、双连通。4、全局最小割。5、2-SAT一、强连通分量强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具。有三种算法:1、Kosaraju算法。对原图和反图分别进行一次深度优先搜索。2、Tarjan算法。用了时间戳。3、Garb...
分类:
其他好文 时间:
2014-09-30 03:11:22
阅读次数:
250
题目链接
题意:证明n个命题全部等价,已经给出m此推导,求至少还要几次推导才能完成整个证明。
思路:可以将命题看作结点,推导看作有向边,则本题就能转化为n个结点m条边的有向图。利用tarjan算法得到所有强连通分量,将这些强连通分量当作一个点,得到一个DAG。之后就可以求次数了。注意当强连通数量为1时,就代表着证明已经完成了。
代码:
#include
#incl...
分类:
其他好文 时间:
2014-09-28 10:31:52
阅读次数:
166
之前Tarjan算法求强连通分量博文中,代码实现用到了固定大小数组,扩展起来似乎并不是很方便,在java里这样来实现本身就是不太妥当的,所以下面给出一个更新版本的代码实现,如果对算法本身不太理解,请先看之前的博文讲解。...
分类:
其他好文 时间:
2014-09-22 16:00:52
阅读次数:
229
题意:
给定一个有向图,求有多少个顶点是由任何顶点出发都可达的。
顶点数
定理:
有向无环图中唯一出度为0的点,一定可以由任何点出发均可达
(由于无环,所以从任何点出发往前走,必然终止于一个出度为0的点)
1. 求出所有强连通分量
2. 每个强连通分量缩成一点,则形成一个有向无环图DAG。
3. DAG上面如果有唯一的出度为0的点,则该点能被所有的点可达。那么该...
分类:
其他好文 时间:
2014-09-15 21:19:19
阅读次数:
253
此算法以有向图作为输入,并按照所在的强连通分量给出其顶点集的一个划分。graph中的每个节点只在一个强连通分量里出现,即使是单点。
任选一点开始进行深度优先搜索(若dfs结束后仍有未访问的节点,则再从中任选一点再从进行)。搜索过程中已访问的节点不再访问。搜索树的若干子树构成了图的强连通分量。
节点按照被访问的顺序存入栈中。从搜索树的子树返回至一个节点时,检查该节点是否是某一...
分类:
其他好文 时间:
2014-09-15 17:56:19
阅读次数:
253
简要题解: 意在判断哪些点在一个图的 奇环的双连通分量内。 tarjan求出所有的点双连通分量,再用二分图染色判断每个双连通分量是否形成了奇环,记录哪些点出现在内奇环内 输出没有在奇环内的点的数目coder/* 求有向图的点双连通分支tarjan算法 ...
分类:
其他好文 时间:
2014-09-05 21:01:51
阅读次数:
274
var{left表示点 root 没离开栈 vis表示点 root 有没有被访问过} i,n,m,now,time,color,top:longint; v:array[0..10001] of record start:longint;end; e:array[0..100001] of r...
分类:
其他好文 时间:
2014-08-17 22:42:52
阅读次数:
229
最近公共祖先(Least Common Ancestor)的两种解决方式,在线RMQ算法和离线Tarjan算法,并且整理成为模板。...
分类:
其他好文 时间:
2014-08-14 01:33:07
阅读次数:
374
1 /* 2 题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为强连通图(指的是边强联通)。 3 思路:利用tarjan算法找出所有的双联通分量!然后根据low[]值的不同将双联通分量 4 进行缩点,最后图形会变成一棵树!也就是添加至少多少条边使一棵树变成强联通图! ...
分类:
其他好文 时间:
2014-08-13 12:46:16
阅读次数:
368
还是LCA-tarjan算法,跟POJ 1330做法基本类似,只是这个题目要求输出两个点的最短距离,其实利用LCA的性质,就是 两个点分别到最近公共祖先的距离之和一开始本来想用并查集把路径长度给找出来,但是不太好处理,原因是我刚好找到的这个点还没有加入到并查集中,(因为还没回溯上去),如果马上就合并...
分类:
其他好文 时间:
2014-08-10 18:06:30
阅读次数:
274