题意:n个城市m条有向边,把这些城市分成若干个州,分的原则是(1)u和v可以互相到达的话他们两个必须在同一个州(2)同一个州里任意两个城市u和v要满足u可以到达v或者v可以到达u。问州的最小个数是多少。
思路:先用Tarjan算法进行缩点,在缩点后的图上进行二分图匹配,最后求得最小路径覆盖=强连通个数-最大匹配数。
可以看一下:
http://blog.csdn.net/hellobabygogo3/article/details/7900812
http://www.cnblogs.com/ka20081...
分类:
其他好文 时间:
2015-08-02 11:50:57
阅读次数:
112
题意:一颗树,定义一条路径的权值等于路径的边权之和,需要求这颗树所有路径中权值的最大值思路:考虑到路径权值与点权的最值有关,而最值的问题通常可以通过排序就行处理,于是想到先把点权排序。容易看出如果某条路径的权值是通过某个点算出的最小 ,那么肯定这条路径肯定不会经过权值更小的点,于是有了两种处理思路1...
分类:
其他好文 时间:
2015-07-28 12:29:35
阅读次数:
413
// 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法。原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html1、前言我始终记得去年冬天有天吃完饭后,我们在买东西的时候讨论着强连通分量和Tarjan什么的。当时我真的什...
分类:
编程语言 时间:
2015-07-27 22:32:54
阅读次数:
282
题意:n个点m条边的有向图,问存在多少个点使得去掉这个点及相连的边后起点和终点不再联通。
思路:很容易想到Tarjan算法求割点,但是稍微一想就会知道不对,因为Tarjan算法求的是整个图的割点,而这里题目只要求能使起点和终点不连通的点。然后我们先用SPFA求出一条最短路径,那么要求的“割点”一定都在这条路径上,仔细想想就会知道。求出最短路径后从起点dfs,直到找到距离start最远的且在最短路径上的点v,那么v就是一个割点,这时更新start,令start=v,重复上面的dfs直到终点。为什么这么做呢?你...
分类:
其他好文 时间:
2015-07-26 11:09:33
阅读次数:
128
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269思路分析:该问题要求判断是否每两个房间都可以相互到达,即求该有向图中的所有点是否只构成一个强连通图分量,使用Tarjan算法即可求解;代码如下:#include #include #include ...
分类:
其他好文 时间:
2015-07-25 00:03:28
阅读次数:
166
题目链接: http://poj.org/problem?id=1144思路分析:该问题要求求出无向联通图中的割点数目,使用Tarjan算法即可求出无向联通图中的所有的割点,算法复杂度为O(|V| + |E|);代码如下:#include #include #include #include usi...
分类:
Web程序 时间:
2015-07-24 16:01:22
阅读次数:
141
求强连通量,为1输出Yes否则No
Tarjan算法模板
具体讲解:https://www.byvoid.com/zht/blog/scc-tarjan
#include "stdio.h"
#include "string.h"
struct Edge
{
int v,next;
}edge[100010];
int head[10010],stack[10010],dfn...
分类:
编程语言 时间:
2015-07-20 19:28:24
阅读次数:
192
强连通分量分解 tarjan算法 (hdu 1269)
题意:
给出一个有n个点m条边的有向图,判断该图是否只有一个强连通分量。
限制:
0
0
思路:
tarjan算法分解强连通分量。
/*强连通分量分解 tarjan算法 (hdu 1269)
题意:
给出一个有n个点m条边的有向图,判断该图是否只有一个强连通分量。
限制:
0 <= N <=...
分类:
编程语言 时间:
2015-07-20 16:37:29
阅读次数:
117
给出N个点,M条边,Q次询问
Q次询问每两点之间的最短距离
典型LCA 问题 Marjan算法解
#include "stdio.h"
#include "string.h"
struct Edge
{
int to,next,len;
}edge[20010];
struct Ques
{
int to,next,index;
}ques[2000010];...
分类:
编程语言 时间:
2015-07-20 16:35:14
阅读次数:
106
LCA tarjan算法模板题
题意:给一个无根树,有q个询问,每个询问两个点,问两点的距离。
用tarjan离线算法算出每个询问的两点的最近公共祖先
ans[i]=dis[x[i]]+dis[y[i]]-2*dis[z[i]]; // x[i],y[i]分别存储每次询问的两点,z[i]存储这两点的最近公共祖先
#include "stdio.h"
#include "stri...
分类:
编程语言 时间:
2015-07-20 11:05:05
阅读次数:
182