随笔分类 -  图论——生成树

摘要:思路: Prim: 这道题目中有重边 Prim可以先加一个sec数组来保存重边的次小边,这样不会影响到最小生成树,在算次小生成树时要同时判断次小边(不需判断是否在MST中) Kruskal: Kruskal对重边就很友好了,不用考虑 原理是这样的:我们先找最小生成树并用used标记好哪些边是MST的 阅读全文
posted @ 2018-07-12 17:37 KirinSB 阅读(211) 评论(0) 推荐(0)
摘要:题意:构成MST是否唯一 思路: 问最小生成树是否唯一。我们可以先用Prim找到一棵最小生成树,然后保存好MST中任意两个点i到j的这条路径中的最大边的权值Max[i][j],如果我们能找到一条边满足:他不是最小生成树中的边,并且它的权值等于Max[i][j],那么他就可以代替MST中的这条边,所以 阅读全文
posted @ 2018-07-12 15:43 KirinSB 阅读(185) 评论(0) 推荐(0)
摘要:思路: 一开始用Kruskal超时了,因为这是一个稠密图,边的数量最惨可能N^2,改用Prim。 Prim是这样的,先选一个点(这里选1)作为集合A的起始元素,然后其他点为集合B的元素,我们要做的就是每次找到B中的一个点,满足这个点到A的权值是B到A的权值中最小的,然后我们把这个点加入到A,再更新B 阅读全文
posted @ 2018-07-09 15:52 KirinSB 阅读(297) 评论(0) 推荐(0)
摘要:题意:求最小生成树第K大的边权值 思路: 如果暴力加边再用Kruskal,边太多会超时。这里用一个算法来减少有效边的加入。 边权值为点间曼哈顿距离,那么每个点的有效加边选择应该是和他最近的4个象限方向的点。这里用一个树状数组维护以y-x为索引的y+x的值,然后这个数组所储存的就是一个点的第一象限方向 阅读全文
posted @ 2018-07-01 11:30 KirinSB 阅读(217) 评论(0) 推荐(0)
摘要:题意: 输入n,然后接下来有n-1行表示边的加边的权值情况。如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25。求连接这棵树的最小权值。 思路: 一开始是在做莫队然后发现没学过最小生成树,就跑过来做模板题了... Kruskal的使用过程:先按权值大小排序,然 阅读全文
posted @ 2018-06-26 23:32 KirinSB 阅读(142) 评论(0) 推荐(0)