算法
YKgsmUDq
这个作者很懒,什么都没留下…
展开
-
最大流——EK算法
EK算法。。。特别暴力:时间复杂度o(V*E^2) 所以竞赛中我们一般用效率更高的dinic算法 EK算法核心就是残量网络图,残量指的就是每条路上剩余的流量。 不难发现,只要能在残量网络图上找到一条从源点到汇点的路,就能在这一条路上加流量,所加的流量就是在这条路径上每条边残量取个MIN,一点一点的加就是了(所以说很暴力)。注意: 当有流量从U流向了V时,就说明V有流量可以流回U,所以除了U-原创 2017-03-13 21:18:21 · 395 阅读 · 0 评论 -
treap
到开始写总结才搞明白treap和BST的关系OTZ。。。言归正传。 treap,也叫数堆 是指有一个随机附加域满足堆的性质的二叉搜索树。 treap∈BST,自然也是用于排序、搜索。 treap是一棵二叉树,并且是一棵排序二叉树。用于解决在集合中进行插入、删除、查询第K大等操作。 这玩意儿其实有点玄,人品不好一样完。 引入裸题:bzoj1503 [NOI2004]郁闷的出纳员题目描述:原创 2017-03-13 22:15:32 · 299 阅读 · 0 评论 -
最长回文子串 manacher
求最长回文子串。 字面意思 这么求??暴力:枚举某个点为回文中心,向两边扩展。(在每个字符中间再插一个没出现过的字符以保证回文子串长度为偶数的情况) 时间复杂度:O(N2)O(N^2)然而可以线性时间:FiF_i表示以ii点为中心时的回文子串半径最大:cabac以b为中心的回文串的半径rr为2 根据回文串的性质:左右对称 我们可以得出在某一个回文串中,以它回文中心右边的某个点为回文中心的最原创 2017-03-30 13:56:14 · 250 阅读 · 0 评论 -
最小费用最大流
裸题意:一个网络,每条边有容量,也有单位流量的费用。此时最大流可能有多种,求费用最小的最大流费用。下面给出最常用的一种方法: 以费用为边长,用SPFA沿还可以增广的边找出一条从源点到汇点的最短路,并记录路径和这条路上的最小流量fminf_{min}。若源汇点之间不连通就表示没有增广路了,当前费用就是最大流的最小费用。 然后增广这条路,这条路的每条边流量加fminf_{min},这条路的增广费用就是f原创 2017-05-31 12:50:10 · 969 阅读 · 0 评论 -
环套树
环套树:顾名思义,一棵树的基础上加一条边使其一部分变成一个环,也就是说点数和个边数一样。有时候给出的图并不连通,这时就变成了环套树森林,也就是有多颗环套树。如图:一般来说,环套树会跟其他算法结合,比如树形DP。环套树的处理方法一般就是把环上的某条边拆掉,然后分别在这条边上的两个点上各做一次树形DP。注意:环套树只是指某一类题目,并没有明确的算法,对于环的处理方式也会有所不同。例题:BZOJ1040(原创 2017-05-31 21:46:45 · 2180 阅读 · 0 评论 -
Dinic
Dinicdinic 求最大流。先引入两个概念:层次图、阻塞流。层次图根据每个点到源点的距离(到达源点最少要经过的边的数量),将点分层。如图:若level[s]=1,则各点上的数字就是该点的level。一个bfs就行了。不难发现,当层次图中不含有汇点时,就说明没有流可以流了。阻塞流就是一条不考虑反向边的极大流,每次流完一条阻塞流就一定会去掉一条边。然后dinic就是先bfs建个层次图,然后dfs一层原创 2017-03-16 13:18:38 · 726 阅读 · 0 评论 -
trie
trietrie(字典树),用一棵树保存多个字符串,如图:这棵字典树就保存着88条字符串:{to,tea,ted,a,i,in,inn}。从根节点到某特定节点的路径就是对应的字符串。如上图节点编号为红色的点就说明:从根节点到该节点的路径为一个保存了的字符串。具体实现用trie[i][j]trie[i][j]表示节点ii走jj字母到达的点的编号(根的编号为0),如上图:trie[0][t]=1,tri原创 2017-07-04 13:12:50 · 589 阅读 · 1 评论 -
最小树形图
裸题意:给你一个图,每条边有一个花费,指定一个点为根,要求选其中若干条边构成一棵合法的树,且花费最少,求最小花费。与最小生成树的区别:最小生成树是要最大的边权最小,最小树形图是要边权和最小。朱刘算法:最小树形图一般用朱刘算法。朱刘算法是由两个中国人提出,一个姓朱,一个姓刘,所以叫朱刘算法。———————————我是分界线,下面正文———————————–首先要认识到,这个最小花费一定不小于每个点的k原创 2017-06-01 21:55:01 · 265 阅读 · 0 评论