部分kruskal重构树内容摘抄于 "bzt神仙的blog" "Problem" 在$Bytemountains$有$n$座山峰,每座山峰有他的高度$h_i$ 。有些山峰之间有双向道路相连,共$M$条路径,每条路径有一个困难值,这个值越大表示越难走,现在有$Q$组询问,每组询问询问从点$v$开始只经 ...
分类:
其他好文 时间:
2019-11-02 11:41:07
阅读次数:
106
T1: 题目链接: "Click here" Solution: 考虑把给定的地图建出图来,那么询问实际上就是询问图上两点所有路径中最大边权的最小值 询问是一个老问题了,把边按权升序排列,用kruskal重构树,答案即为树上两点lca的点权 考虑如何建图,我们用一个bfs来建图即可,每次扩展到一个被 ...
分类:
其他好文 时间:
2019-10-30 11:43:05
阅读次数:
57
~~我不信还有人比这个全~~ 总共三种,大家最熟悉的$Kruskal$,$Prim$以及不那么熟悉的$Bor?vka$。 时间复杂度:$Kruskal:\mathcal{O}(MlogM),Prim:\mathcal{O}(N^2),Bor?vka:\mathcal{O}(MlogN)$ 堆优化$P ...
分类:
编程语言 时间:
2019-10-28 21:16:33
阅读次数:
159
#include #include using namespace std; const int maxm=100000; const int maxn=5000; int tot; struct edge{ int u,v,w; }e[maxm*2]; int father[maxn]; void... ...
分类:
其他好文 时间:
2019-10-26 22:43:32
阅读次数:
100
题目大意 给定一张n个点m条边的图,图上有两种边,求保证有k条第一种边的情况下的最小生成树 "传送门" 题解 考虑最小生成树kruskal算法 先找到不含限制的最小生成树,然后就可以知道哪些第一种边是必选的 然后跑第二遍kruskal,先把第一种边加到k条,然后加入第二种边就好 代码 cpp inc ...
并查集写错少find了导致一直MLE。。。 dfs+kruskal 因为时间胶囊无限,所以相当于回溯回祖先节点再向下dfs 先dfs一遍看最多能滑多少点,能滑到的点连边 用这些新的边跑最小生成树,排序的时候先按高度从大到小再按边权从小到大 code 1 #include<bits/stdc++.h> ...
分类:
其他好文 时间:
2019-10-25 18:15:31
阅读次数:
88
/* * 克鲁斯卡尔(Kruskal)最小生成树 */ void kruskal(Graph G) { int i,m,n,p1,p2; int length; int index = 0; // rets数组的索引 int vends[MAX]={0}; // 用于保存"已有最小生成树"中每个顶点... ...
分类:
编程语言 时间:
2019-10-23 14:02:24
阅读次数:
184
题面 https://www.luogu.org/problem/P3343 题解 一个几乎显然的暴力做法,枚举每一条边的大小关系,跑$Kruskal$,算出最长的边是第几小的,然后利用“对于$n$个$[0..1]$之间的随机变量$x_1,x_2,...,x_n$,第$k$小的那个的期望值是$\fr ...
分类:
其他好文 时间:
2019-10-20 16:03:29
阅读次数:
68
[TOC] 最小生成树 $By:Soroak$ 定义:一个有 $n$ 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 $n$ 个结点,并且有保持图连通的最少的边。最小生成树可以用 $kruskal$ 算法或 $Prim$ 算法求出。 Kruskal 定义: $Kruskal$ 是基于 ...
分类:
其他好文 时间:
2019-10-18 21:51:33
阅读次数:
97
Luogu P1396 营救 本来刚开始想用Dijkstra,但调了一半天都还有问题,所以果断放弃。 后来考虑了一下题目,发现可以考虑求最小生成树,于是开Kruskal。 果然最小生成树还是很好想的。 cpp include define N 10010 define M 20010 using n ...
分类:
其他好文 时间:
2019-10-17 23:57:40
阅读次数:
207