摘要:
克鲁斯卡尔(Kruskal)算法(只与边相关)算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系,可以证明其时间复杂度为O(eloge)。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条件则继续遍历图,寻找下一个最小权值的边。3.递归重复步骤1,直到找出n-1条边为止(设图有n个结点,则最小生成树的边数应为n-1条),算法结束。得到的就是此图的最小生成树。克鲁斯卡尔(Kruskal)算法因为只与边相关,则适合求稀疏图的最小生成 阅读全文
摘要:
1、最短路上的统计题目:一个无向图,没有自环,所有边的权值均为1,对于一个点对(a,b),输出a,b之间所有最短路上的点的总个数。题解:floyed求出所有的最短路,如果 map[a,b]=map[a,k]+map[k,b]那么 k 就是 a b 最短路上的点。最后输出总个数+2。编译通过...├测试数据01:答案正确...0ms├测试数据02:答案正确...0ms├测试数据03:答案正确...0ms├测试数据04:答案正确...0ms├测试数据05:答案正确...0ms├测试数据06:答案正确...0ms├测试数据07:答案正确...0ms├测试数据08:答案正确...0ms├测试数据09: 阅读全文
摘要:
昨天的杭电多校联合训练热身赛的一道题,求区间的中位数,快排会超时,划分树的模版题。。划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k大值。划分树和归并树都是用线段树作为辅助的,原理是基于快排和归并排序的。划分树的建树过程基本就是模拟快排过程,取一个已经排过序的区间中值,然后把小于中值的点放左边,大于的放右边。并且记录d层第i个数之前(包括i)小于中值的放在左边的数。具体看下面代码注释。查找其实是关键,因为再因查找[l,r]需要到某一点的左右孩子时需要把[l,r]更新。具体分如下几种情况讨论:假设要在区间[l,r]中查找第k大元素,t为当前节点,l 阅读全文