随笔分类 - 算法
二分图 最小路径覆盖
摘要:定义:在一个有向图中,找出最少的路径,使得这些路径,经过每一个点,且每一个点只与一条路径相关联,由上面得出:1.一个单独的点是一个路径2:如果有路径a,b,c。。。。f,g。a为起点,g为终点。那么a到g的点不在与其他点之间存在有向边。最小路径覆盖=点数---最大匹配数证明:1 如果匹配数为0,那么图中没有边,需要n条路径2 如果a,b之间连一条边,那么匹配数增1,需要的路径数会减少一,因为a,b之间只需要一条,那么就证明了**********************一个最好的利用是 把点分为i与i’点,建立二分图模板。View Code #include<iostream>#in
阅读全文
Lca与Rmq
摘要:关于LCA和RMQ问题一、最近公共祖先(Least Common Ancestors)对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。这里给出一个LCA的例子:例一对于T=<V,E>V={1,2,3,4,5}E={(1,2),(1,3),(3,4),(3,5)}则有:LCA(T,5,2)=1LCA(T,3,4)=3LCA(T,4,5)=3 二、RMQ问题(Range Minimum Query)RMQ问题是指:对于长度
阅读全文
RMQ
摘要:ST算法(Sparse Table),以求最大值为例,设d[i,j]表示[i,i+2^j-1]这个区间内的最大值,那么在询问到[a,b]区间的最大值时答案就是max(d[a,k], d[b-2^k+1,k]),其中k=[ln(b-a+1)/ln(2)](即2^k<=b-a+1(长度)) d的求法可以用动态规划,d[i,j]=max(d[i,j-1],d[i+2^(j-1),j-1])来看一下ST算法是怎么实现的(以最大值为例): 首先是预处理,用一个DP解决。设a是要求区间最值的数列,f表示从第 i 个数起连续 2^j 个数中的最大值。例如,数列3 2 4 5 6 8 1 2 9 7 ,
阅读全文