- 博客(4)
- 收藏
- 关注
原创 最小树形图(朱刘算法)
定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图。对于没有给定根,我们可以新建一个点,然后让它向所有点都连一条权值为所有边权和的(或者自己定义一个inf)边,然后把该点定为根。这样找到最小树形图一定包含且只包含一条新边,减掉这条边的权值就可以了。 算法流程: (0,先除去自环) 1,选入边集——找到除root点之外,每一个点的所有入边中权值最小的,用数组
2017-05-23 17:16:07 776
原创 强连通分量(Kosaraju算法)
求有向图的强连通分量除了大家熟知的trajan,还可以用Kosaraju 先说算法流程: 1,对原图dfs一遍,并将出栈顺序的逆序作为“伪拓扑序” 2,对原图够构反向图 3,按伪拓扑序在反向图上dfs,新遍历到的点都属于同一个强联通分量。正确性证明: s在反向图上dfs能够遍历到t,说明存在t到s的路径,而现在需要证明的就是存在s到t的路径。 我们知道,s的伪拓扑序小于t,也就是s后退栈
2017-05-23 16:45:39 701
原创 K最短路问题(A*算法)
问题在有向带权图G,求从s到t的第k短路(不严格递增)的长度。A*算法通过一个估价函数f(x)来估计图中的当前点p到终点的距离,并由此决定它的搜索方向; 设g(x)表示走当前路径到x的长度,dis(x,y)表示x到y的最短距离,由于y只有等于t时才有用,所以我们可以连反向边,然后从t出发跑一遍最短路得到。 令f(x)=g(x)+dis(x,t) 建一个优先队列,初始将源点s加入到队列中; 每
2017-05-20 10:29:31 3051
原创 中学生数据结构题
题目大意给一棵n个带点权节点(初始为0)的树 有三种操作: 1,对一条路径上的点的点权全部增加一个数 2,求一条路径上的点的点权和 3,对一条路径进行轮换(假如路径为a_1~a_k则a_1–>a_2,a_2–>a_3….a_k–>a_1)容易想到用lct维护,轮换操作可以直接把左端点接到右端点的右儿子处,但这样会改变树的形态,具体实现就是把权值和形态分开来维护,维护树的形态的lct中,每个s
2017-05-05 16:08:10 814
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人