随笔分类 -  图论

摘要:Luogu2863:利用Tarjan求有向图的强连通分量 强连通分量这这样的一个子图: 图中的任意两点都可以相互通达,它是有向图 这里的例题题意是这样的,统计所有强连通分量中,至少包含两个点的强连通分量的数量 这里面把强连通分量的点放在st栈里,用vis进行存在性标记 col的意思是下标属于哪一个强 阅读全文
posted @ 2018-08-06 10:14 静听风吟。 阅读(175) 评论(0) 推荐(0)
摘要:UVA796:利用Tarjan求无向图的割边(桥) Tarjan求割边和求割点的差异不大 这里有的变量在上一篇博文中已经介绍过了 我们看到mp映射是用来替代二维数组进行判重的 本来打算换成hash_map但是发现并不好用,这是个必须要补的坑 这里的判重是判断是否有重边,由于权重都是1所以并不需要进行 阅读全文
posted @ 2018-08-06 09:47 静听风吟。 阅读(496) 评论(0) 推荐(0)
摘要:Luogu3388:利用Tarjan求无向图的割点 割点就是维护双连通分量的一个点,如果删去的话,原本的双连通分量就会被拆成若干个连通分量 利用Tarjan算法可以求出无向图的所有割点 下面介绍一下: 邻接表建图,开二倍边长(无向图) deep用来跟踪记录每一个点的深度,或者说,它在dfs中是第几个 阅读全文
posted @ 2018-08-05 22:20 静听风吟。 阅读(219) 评论(0) 推荐(0)
摘要:运用矩阵树定理进行生成树计数 给定一个n个点m条边的无向图,问生成树有多少种可能 直接套用矩阵树定理计算即可 矩阵树定理的描述如下: 首先读入无向图的邻接矩阵,u-v G[u][v]++ G[v][u]++ 度数矩阵: u-v D[u][u]++ D[v][v]++; 然后计算图G的基尔霍夫矩阵 C 阅读全文
posted @ 2018-08-05 16:14 静听风吟。 阅读(301) 评论(0) 推荐(0)
摘要:BZOJ1430:运用Cayley定理解决树的形态统计问题 由Prufer编码可以引申出来一个定理:Cayley 内容是不同的n结点标号的树的数量为n^(n-2) 换一种说法就是一棵无根树,当知道结点总数的时候,其最多可能有n^(n-2)种形态 这只是形态而已 对于BZOJ1430这道题 题目的打架 阅读全文
posted @ 2018-08-05 15:26 静听风吟。 阅读(174) 评论(0) 推荐(0)
摘要:BZOJ1211:使用prufer编码解决限定结点度数的树的计数问题 首先学习一下prufer编码是干什么用的 prufer编码可以与无根树形成一一对应的关系 一种无根树就对应了一种prufer编码 先介绍编码过程: 选择无根树中度数为1的最小编号节点(也就是编号最小的叶子节点),将其删除,把它的邻 阅读全文
posted @ 2018-08-05 11:46 静听风吟。 阅读(573) 评论(0) 推荐(0)
摘要:HDU4010 类比静态区间问题->动态区间问题的拓展 我们这里把区间变成树,树上的写改删查问题,最最最常用LCT解决 LCT用来维护动态的森林,对于森林中的每一棵树,用Splay维护。 LCT是把这些Splay关联在一起的数据结构 我们以HDU4010为例子 这里把树存成了图,邻接表表示,对于森林 阅读全文
posted @ 2018-08-04 15:15 静听风吟。 阅读(418) 评论(0) 推荐(0)
摘要:BZOJ1602 求最近公共祖先有三种常用的方法,在线的有两种,分别是树上倍增算法和转化为RMQ问题 离线的有一种,使用Tarjan算法 这里,我们介绍复杂度优异并且在线的倍增算法,至于后续的两种方法等到之后接触了相关方面的内容之后再进行补充,到时候写一篇总结 我们在计算树上的两点的最短路径时,如果 阅读全文
posted @ 2018-08-04 14:15 静听风吟。 阅读(653) 评论(0) 推荐(0)
摘要:如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统 举一个例子,给定n个变量和m个不等式,每个不等式的形式为x[i]-x[j]<=a[k](0<=i,j<n,0<=k<m,a[k]已知)求x[i]-x[j]的最大值 为了 阅读全文
posted @ 2018-07-31 21:10 静听风吟。 阅读(255) 评论(0) 推荐(0)
摘要:欧拉道路描述的是无向图的一个顶点出发的一条道路能够经过每条边恰好一次 欧拉回路指的是任意点出发都满足上述性质 如果一个图是欧拉道路或者欧拉回路,必须满足两个条件 第一个条件,这个图是连通图 第二个条件,所有点的度数满足“一定的关系” 然后我们阐述一下“一定的关系”是什么 检查这个图所有点的度数,求出 阅读全文
posted @ 2018-07-29 23:58 静听风吟。 阅读(1378) 评论(0) 推荐(0)
摘要:把一个图的所有节点进行排序,是的每一条有向边(u,v)所对应的u都排在v的前面 如果一个有向图的拓扑序列不存在,那么它就不是一个DAG (DAG的最短路可以用动态规划方法求出,以后再介绍) 好久没有参考刘汝佳的代码了。。 n个点m条边和临时变量t g是邻接矩阵,对于一个图来说,我们一般是用邻接表来存 阅读全文
posted @ 2018-07-29 23:16 静听风吟。 阅读(357) 评论(0) 推荐(1)
摘要:在最短路问题中,如果我们面对的是稠密图(十分稠密的那种,比如说全连接图),计算多源最短路的时候,Floyd算法才能充分发挥它的优势,彻彻底底打败SPFA和Dijkstra 在别的最短路问题中都不推荐使用这个算法 我们以一道单源最短路题目介绍一下在输入数据为边表的情况下的Floyd使用情况,如果直接给 阅读全文
posted @ 2018-07-29 22:51 静听风吟。 阅读(1196) 评论(0) 推荐(0)
摘要:Dijkstra+堆优化具有稳定的时间复杂度,在一些数据范围要求比较严格(准确来说是图比较苛刻)的时候能够保证稳定的时间复杂度 但是Dijkstra不能够解决负边权的问题,所以在使用的时候一定要仔细读题 如果题目说了边权非负,首选Dijkstra算法, 如果图不是一些特殊的数据,可以尝试SPFA算法 阅读全文
posted @ 2018-07-28 22:00 静听风吟。 阅读(282) 评论(0) 推荐(0)
摘要:我们之前介绍了一种,(最常用的)SPFA算法,SPFA算法是对Bellman-Ford算法的队列优化,用队列替代了Bellman-Ford中的循环检查部分 然后这里我们介绍Bellman-Ford算法是为了介绍其对负权环的判定部分,以及这部分在SPFA的体现 首先是建图部分,邻接链表,其实对于Bel 阅读全文
posted @ 2018-07-28 17:57 静听风吟。 阅读(256) 评论(0) 推荐(0)
摘要:BZOJ1036 到此为止我们已经熟悉了静态区间的询问操作,我们还在此基础上将问题拓展到了二维并给出了部分的解决方案 然后,我把把区间变成一棵树,对于树上的询问,比如求树上两点之间最值,树上两点之间的点权之和,我们有固定的解决方案:树链剖分 这两个问题,也是题目问我们的 把树打成链再在链上查询是一种 阅读全文
posted @ 2018-07-28 16:44 静听风吟。 阅读(451) 评论(0) 推荐(0)
摘要:在这里对图的存储和遍历进行一个规范,为以后更复杂的数据结构学习打下基础 首先是邻接矩阵的形式,适合于存稠密图,如果是全连接图就再合适不过了 一个二维数组就可以搞定了,如果是bool值那么就是不带权值的 a[i][j]=w表示i->j这条边的权值为w,反之亦然 建图操作是很显然的 接下来是一个DFS: 阅读全文
posted @ 2018-07-17 16:09 静听风吟。 阅读(659) 评论(0) 推荐(0)
摘要:该算法由Bellman-Ford算法演变过来,首先介绍一下Bellman-Ford算法 最短路最多经过n-1个点,可以用n-1轮松弛操作来得到 当然这个算法我没有实际应用过,而是一直在用它的优化算法,利用队列代替前面的循环检查 SPFA最坏时间复杂度仍然为O(nm),但是有人分析其时间复杂度为O(k 阅读全文
posted @ 2018-07-06 12:05 静听风吟。 阅读(165) 评论(0) 推荐(0)
摘要:Kruskal算法核心是加边,先把所有边按照权值从小到大排序,然后在剩下的所有没有被选过的边中,找到最小的边,如果和已经选取的边构成回路则放弃,选取次小边,直到选取了n-1条边为止,这样所有点就都连通了。 每次从边集中选取的权值最小的边的两个顶点如果属于不同的树,就把他们合并(把这条边加入子图),反 阅读全文
posted @ 2018-07-06 11:54 静听风吟。 阅读(306) 评论(0) 推荐(0)