H煊的博客

好困

拓扑排序

int indegree[100]; queue<int> q; int n,m; bool map[100][100]; int a[100]; int topo(int n) { int cnt = 1; while(!q.empty...

2018-05-24 18:17:43

阅读数:41

评论数:0

欧拉路,回路

判定:   欧拉路:       有向图:图连通,有一点入度>出度,有一点出度>入度,其余点入度=出度或入度=出度;Play on Words       无向图:图连通,零个或两个奇数度,其余偶数度;一笔画问题   欧拉回路:       有向图:图连...

2018-05-16 15:42:15

阅读数:28

评论数:0

最大流之Dinic算法

之前简单介绍了最大流之Ford-Fulkerson算法,此算法时间复杂度为O(F*E)。大多数情况下,这个算法已经足够高效了,但当顶点数或最大流流量非常大时,这个算法就显得不够快了。下面简单介绍易实现的Dinic算法。 Ford_Fulkerson算法通过深度优先搜索寻找增广路,并沿着它增广。与...

2017-09-20 21:00:05

阅读数:173

评论数:0

AC自动机

ac自动机是kmp的高级版,实现多模式串匹配。 代码: struct AC{ int next[500005][26], fail[500005], word[500005], Q[500005]; int root, tol; int newNode(){ ...

2017-09-15 21:07:13

阅读数:102

评论数:0

tarjan算法浅谈

1.求割点:  割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。  原理:若low[v]>=dfn[u],则u为割点。因low[v]>=dfn[u],则说明v通过子孙无法到达u的祖先。那么对于原图,去掉u后,必然会分成两个子图。  所以处理节点u时,先递归v的子节点,...

2017-09-15 18:15:42

阅读数:212

评论数:0

虚树

虚树

2017-09-11 20:52:24

阅读数:108

评论数:0

后缀数组(倍增法)

后缀数组(Suffix Array):将某个字符串的所有后缀按字典序排序后得到的数组。 算法:朴素实现:直接将所有后缀进行排序,将n个长度为O(n)的字符串进行排序,时间复杂度O(n^2*logn);倍增算法:通过充分利用各个后缀之间的联系,将构造后缀数组的最坏时间复杂度成功降至O(n*logn)...

2017-09-07 23:33:42

阅读数:310

评论数:0

splay树

splay树(伸展树): 概述:二叉查找树的一种改进数据结构,是可以随意翻转的二叉树 平摊时间复杂度:O(logn) 基本操作:类似AVL数操作,分为3种情况: (1)zig         (2)zig-zag         (3)zig-zig

2017-08-27 09:24:55

阅读数:68

评论数:0

割点、割边

代码: int cnt=0; int index=0; void dfs(int u) { dfn[u] = low[u] = ++index; for(int v = 0; v < n; v++) { if(G[u][v...

2017-08-25 17:59:59

阅读数:112

评论数:0

ZOJ 1141 Closest Common Ancestors(LCA)

Closest Common Ancestors Time Limit: 10 Seconds      Memory Limit: 32768 KB Write a program that takes as input a rooted tree and a list of p...

2017-08-20 16:28:40

阅读数:85

评论数:0

ZOJ 1083 Frame Stacking(拓扑排序)

Frame Stacking Time Limit: 2 Seconds      Memory Limit: 65536 KB Consider the following 5 picture frames placed on an 9 x 8 array. Now p...

2017-08-20 10:34:12

阅读数:227

评论数:0

ZOJ 1117 Entropy(哈夫曼树)

Entropy Time Limit: 2 Seconds      Memory Limit: 65536 KB Background An entropy encoder is a data encoding method that achieves lossless data com...

2017-08-19 22:13:00

阅读数:204

评论数:0

2-SAT

int main() {           //           //           V=6;                      //           add_edge(3,4);//           add_edge(1,0);//           //     ...

2017-08-14 23:10:23

阅读数:158

评论数:0

有向图的强连通分量分解

int V;//顶点数 vector G[max_v];//图的邻接表表示 vector rG[max_v];//图的逆邻接表表示 vector vs;//后续遍历顺序的顶点列表 bool used[max_v);//访问标记 int cmp[max_v];//所属强连通分量的拓扑序 void...

2017-08-14 18:27:46

阅读数:250

评论数:0

无向图的连通分量

void dfs(int s) { mark[s]=true; for(int i=1;i<=n;i++) if(G[s][i]&&!mark[i])//有边(s,i),且顶点i未标记 dfs(i); } for(int i=1;i<...

2017-08-12 21:27:43

阅读数:185

评论数:0

最小生成树

首先明确最小生成树是无向图,接下来简单讲解Prim算法和Kruskal算法。 Prim算法:首先我们假设有一棵只包含一个顶点v的树T,然后贪心地选取T和其他顶点之间相连的最小权值的边,并把它加到T中。不断进行这个操作,就可以得到一棵生成树了。 特点:适合稠密图,其时间复杂度为O(v^2);采用邻接...

2017-08-11 00:17:46

阅读数:101

评论数:0

并查集

并查集可以在O(α(n))时间内进行以下两种操作: 1)查询元素a和元素b是否属于同一组; 2)合并元素a和元素b所在的组; ps:这是“均摊复杂度”,且比O(log(n))还要快; 并查集是使用树形结构实现的,为了避免发生退化,采用以下两种优化操作: 1)对于每课树,记录这棵树...

2017-08-10 15:32:44

阅读数:75

评论数:0

第K短路(A*算法)

第K短路 对于无向图: SPFA+A*算法:先用SPFA求目标结点到各个结点的最短路径;然后,取g(x)为从初始结点到当前结点x的路径长度,h(x)为从x结点到目标结点的最短路径长度,即h(x)取dis[x]即可,估价函数f(x)=g(x)+h(x)。 对于有向图: SPFA+A*算法:显然应将有...

2017-08-09 23:13:48

阅读数:494

评论数:0

A*算法

A*算法:一种典型的人工智能启发式搜索算法,被广泛应用在最优路径求解和一些策略设计的问题中。 启发式搜索:与DFS和BFS这类盲目型搜索最大的不同,就在于当前搜索结点往下选择下一步结点时,可以通过一个启发函数来进行选择,选择代价最小(大)的结点作为下一步搜索结点,以求得问题的最小(大)值。 选...

2017-08-08 23:31:41

阅读数:102

评论数:0

浅谈几大最短路

常用四大最短路算法: Dijkstra: 平凡实现O(V^2),使用数据结构堆优化O(ElogV),不适用于负权 Bellman-Ford: O((V*E)适用负权 SPFA: O(kE (k一般 Floyd-Warshall: O(V^3)适用负权 最短路的一般操作: (1)初始化: d数...

2017-08-05 11:55:08

阅读数:85

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭