
树型结构
WLHW
这个作者很懒,什么都没留下…
展开
-
次小生成树
input 第一行包含两个整数N 和M,表示无向图的点数与边数。 接下来 M行,每行 3个数x y z 表示,点 x 和点y之间有一条边,边的权值为z。output 包含一行,仅一个数,表示严格次小生成树的边权和。exampleinput 5 6 1 2 1 1 3 2 2 4 3 3 5 4 3 4...原创 2018-08-10 09:12:59 · 225 阅读 · 0 评论 -
克鲁斯卡尔(kruskal)法求最小生成树
kruskal基本思想: 克鲁斯卡尔算法的基本思想是以边为主导地位,始终选择当前可用(所选的边不能构成回路)的最小权植边。所以Kruskal算法的第一步是给所有的边按照从小到大的顺序排序。这一步可以直接使用库函数qsort或者sort。接下来从小到大依次考察每一条边(u,v)。具体实现过程如下: <1> 设一个有n个顶点的连通图为G(V,E),最初先构造一个只有n个顶点,没有边的非连通图T={V,原创 2017-10-20 18:30:51 · 503 阅读 · 0 评论 -
最小生成树之普里姆(prim)法求最小生成树
prim基本思想 设G是具有n(u1,u2,u3.....un)个顶点,m个边的连通无向图,T是G的最小生成树, T的初始状态为U={u1},value={}, 记一个数组d[i],,表示当前最小生成树中的顶点到i的最小值; d的初始状态为d[i]=d[1][i];#include<bits/stdc++.h>using namespace std;int a[10010][10010],原创 2017-10-18 21:01:06 · 367 阅读 · 0 评论 -
树的直径
定义: 树上距离最远的点(树的最长路)。算法思想 在树上任选一点u,求距离点u最远的点v,再求距离点v最远的点s,点v到点s的距离即为树的直径。过程 两遍BFS :先任选一个起点BFS找到最长路的终点,再从终点进行BFS,则第二次BFS找到的最长路即为树的直径; 原理: 设起点为u,第一次BFS找到的终点v一定是树的直径的一个端点证明...原创 2018-08-03 08:48:07 · 476 阅读 · 1 评论 -
树的重心
定义: 对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。性质 树中所有点到某个点的距离和之中,到中心的距离和最小。 把两棵树通过一条边相连,新的树的重心在他们重心的连线上。 把一棵树添加或删除一个叶子,它的重心最多只移动一条边的距离。 一棵树最多有两...原创 2018-08-03 09:53:34 · 437 阅读 · 0 评论 -
最近公共祖先(LCA)
问题描述与分析求有根树的任意两个节点的最近公共祖先。解答这个问题之前,咱们得先搞清楚到底什么是最近公共祖先。最近公共祖先简称LCA(Lowest Common Ancestor),所谓LCA,是当给定一个有根树T时,对于任意两个结点u、v,找到一个离根最远的结点x,使得x同时是u和v的祖先,x 便是u、v的最近公共祖先。(参见:http://en.wikipedia.org/wiki/Lo...转载 2018-08-03 10:29:42 · 434 阅读 · 0 评论 -
线段树
基本概念 线段树的每个节点表示一个区间,主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。每个节点的左孩子区间范围为[ l,mid ],右孩子为[ mid+1 , r ]对于结点k,左孩子结点为2k,右孩子为2k+1。基本操作建树二分每个...原创 2018-11-05 18:41:25 · 216 阅读 · 0 评论