算法
文章平均质量分 75
Shlfa
这个作者很懒,什么都没留下…
展开
-
次小生成树——转载于张鹏飞博客
一.理论准备需要读者事先懂得prime算法,不太了解的请看博主这一篇http://www.cnblogs.com/hxsyl/p/3286956.html,也需要读者对DP了解一些。先看一个结论:次小生成树可由最小生成树换一条边得到 证明:咱换种方式去看待这个结论(一个生成树可以通过换边得到另一个生成树),T是某一棵最小生成树,T0是任一棵异于T的生成树,通过变换T0 --> T1 -->转载 2015-10-05 11:06:00 · 443 阅读 · 0 评论 -
排列组合基本公式
基本原理1.加法原理 集合S=s1∪s2∪s3..sm且si∩sj=∅(i则s=s1+s2+s3..sm2.乘法原理 s(a,b) 取a有p种,取b有q种 s=p*q公式1.对于集合s(没有重复元素): 从s中n个元素中取r个排列的方案数p(n,r)=n!/(n-r)! 从s中n个元素中取r个组合的方案数c(n,r)=n!原创 2015-10-06 15:27:59 · 2247 阅读 · 0 评论 -
Tarjan算法
定义在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。Tarjan算法可以用于求一张有向图的最大强联通分量基本参数对于一张有向图上图来自byvoid大牛进行dfs搜索后会出现一棵df原创 2015-09-19 15:18:00 · 345 阅读 · 0 评论 -
Gray码生成
方法一:(1) 1阶Gray码是 0, 1;(2) 设n>1, 且n-1阶Gray码已定义好, 将n-1阶Gray码顺序列一遍, 接下来 将n-1阶Gray码反序列一遍, 顺序列的码每个前面添0, 反序列的码每个前面添1.var n,s,i,s1,k,j:longint; a:array[0..1000] of l原创 2016-04-06 23:24:40 · 469 阅读 · 0 评论 -
堆
堆小根堆const maxn=1000;var n,l,i,temp:longint; a:array[0..maxn] of longint; procedure put(x:longint);var son,temp:longint;begin inc(l); a[l]:=x; son:=l; while (sona[son]) do原创 2016-04-07 00:01:09 · 270 阅读 · 0 评论 -
树上倍增实现lca
LCA实现方法1.dfs搜索树形成欧拉序列用st算法维护区间最值2.tarjan离线求lca3.树上倍增实现lca(方法如下)模板代码#include#define maxn 100#define max2 20using namespace std;struct node{ int to,next;} poi[maxn*2]原创 2016-04-30 14:20:59 · 585 阅读 · 0 评论 -
RMQ问题之ST算法
ST算法的基本原理百度一下就可以知道 RMQ(Range Minimum/Maximum Query)问题是求区间最值问题。可以写一个线段树,但是预处理和查询的复杂度都是O(logn)。这里有更牛的算法,就是ST算法,它可以做到O(nlogn)的预处理,O(1)!!!地回答每个询问。 来看一下ST算法是怎么实现的(以最大值为例): 首先是预处理,用一转载 2016-04-25 09:35:44 · 278 阅读 · 0 评论