Tarjan-LCA算法:
对于每一点u:
1.建立以u为代表元素的集合。
2.遍历与u相连的节点v,如果没有被访问过,对于v使用Tarjan-LCA算法,结束后,将v的集合并入u的集合。
3.对于与节点u相关的询问(u,v),如果v被访问过,则结果就是v所在集合的所代表的元素。求(u,v)的最近公共祖先节点,则询问时调用QEdges[k].lca = find(QEdges[k].to);...
分类:
其他好文 时间:
2015-05-04 11:57:14
阅读次数:
116
题意:给定一个无向图,分别求出不在任何环中的边的数量和同时在两个或以上的环中的边的数量。
解法:桥上的边就是不在任何环中的。而如果一个点双连通分量中边的数量比点的数量要多,那么该双连通分量的所有边都同时在两个或以上的环中(这个可以想象一下,在一个简单环中多加一条端点不同的边,这样简单环就会被分割成两个小的简单环,任何一条在大的环中的边都会同时处于一个其中一个小的环中)。
在tarjan算法中,...
分类:
其他好文 时间:
2015-05-03 09:23:49
阅读次数:
119
Update everyday.(Last edit:4/27 21:39)Task 1:TPO X 2.5(finish 1,then finish 2 more)Task 2:TC Tarjan相关(Ch.22)Task 3:To be continued
分类:
其他好文 时间:
2015-04-27 23:21:25
阅读次数:
107
题目大意:给定一些自动机,如果某个自动机AA能产生的所有串都能在自动机BB中产生,则称BB是AA的一个升级,求最长链
这题TM有毒
数据范围5050,暴力枚举每一对点之间的关系,然后Tarjan缩点求最长链就行了
现在对于一对自动机AA和BB,我想知道AA能产生的所有串是否都能在BB中产生,那么BFS就可以了
我们用一个二元组(x,y)(x,y)表示走了某个串后AA走到了节点xx,BB走到了...
分类:
其他好文 时间:
2015-04-27 21:58:29
阅读次数:
155
求割点一种显然的n^2做法: 枚举每个点,去掉该点连出的边,然后判断整个图是否联通用tarjan求割点: 分情况讨论 如果是root的话,其为割点当且仅当下方有两棵及以上的子树 其他情况 设当前节点为u,一个儿子节点为v 存在low[v]>=dfn[u],也就是说其儿子节点v能连到的最前...
分类:
其他好文 时间:
2015-04-27 14:59:24
阅读次数:
121
最近做到一道题目,大概的意思就是求一个多叉树中两个节点的最近公共祖先,输入是用邻接矩阵表示的。要想理解tarjan算法并实现它,需要先理解一下内容:1) 深度优先搜索;tarjan算法核心思想:当某节点刚刚搜索完毕时,看与其相关的结点v是否已经被访问,如果v已经被访问过了,则它们的最近公共祖先就是v...
分类:
编程语言 时间:
2015-04-26 15:12:34
阅读次数:
138
分析:首先求强连通分量的个数,然后进行缩点,最后求出最终答案。
1、求强连通分量的个数使用tarjan算法。
2、缩点为另外一个图,通过tarjan算法求出的结果进行。缩点后的图中求出每个点的入度。
3、求出每个强连通分量中的最小花费。
4、根据缩点后图的入度求出最终结果。
#include
#include
#include
using namespace std;
vect...
分类:
编程语言 时间:
2015-04-25 15:12:01
阅读次数:
182
分析:本题判断一个图是否是有向强连通分量,这里使用tarjan算法求解。
#include
#include
#include
using namespace std;
vector map[10002];
stack tarjan_stack;
int low[10002];
int dfn[10002];
bool vis[10002];
int cnt,pos;
void Init(i...
分类:
编程语言 时间:
2015-04-25 13:46:55
阅读次数:
150
大致题意:
给出一个连通的无向图,求哪些点是割点,对于每个割点,求出去掉这个点后连通分量的个数。如果没有割点的话输出“ No SPF nodes”。
思路:
求割点用tarjan即可,然后要求删除割点后连通分量的个数,每次找到割点,再在从割点dfs即可,也可以直接在tarjan算法中记录child个数。那么如果割点是根,那么答案就是child,不是根的割点答案是child+1
//1...
分类:
其他好文 时间:
2015-04-24 09:09:55
阅读次数:
111
这篇从原理上理解2-sat如何转化成图论问题简述了如何了实现算法:http://wenku.baidu.com/view/31fd7200bed5b9f3f90f1ce2.html
总的来说2-sat有两种算法,一种用dfs染色搜索出一种解,一种用tarjan(判定是否有解)+拓扑排序构造出任意一个可行解。
dfs从理论上复杂度很高,但是实际上远远达不到上界,而且可以按字典序搜索,实现也简单多...
分类:
其他好文 时间:
2015-04-24 09:09:08
阅读次数:
233