模板
文章平均质量分 67
Veda_
这个作者很懒,什么都没留下…
展开
-
最小树形图
最小树形图#include#include#define type intusing namespace std;const int mm=44444;const int mn=1111;const int oo=1000000000;type c[mm],in[mn],ans;int s[mm],t[mm],id[mn],pre[mn],q[mn];type Directed原创 2013-08-26 19:33:25 · 542 阅读 · 0 评论 -
KMP算法 字符串匹配个人理解
最近很纠结,看了一个多星期,终于基本理解KMP算法,今天写下此文,献给那些依然纠结在KMP中的兄弟同胞们!(如果您已经了解过KMP算法的请跳过这一段)刚刚进来的童鞋可能还不明白什么是KMP算法,现在在这里先大体的说以下,KMP算法其实就是字符串匹配的算法,和C语言的一个函数strstr();功能一样,引用严蔚敏教授的例子,主串 S:acabaabaabcacaabc 模式串 T:abaab转载 2014-04-09 20:11:48 · 708 阅读 · 0 评论 -
后缀数组模板
http://caiminjian.diandian.com/post/2012-08-27/40038043416 算法解释N为一倍即可,m至少比最大值大1int s[N],wa[N],wc[N],wv[N],sa[N],wb[N],height[N],rank[N];inline bool cmp(int *r,int a,int b,int l){ return转载 2014-02-04 15:28:07 · 516 阅读 · 0 评论 -
高斯消元模板
typedef vector vec;typedef vector mat;#define EPS 1e-8vec Gauss_jordan(const mat& A, const vec& b){ int n=A.size(); mat B(n, vec(n + 1)); for(int i=0; i<n; i++) for(int j=0; j转载 2014-04-20 10:34:59 · 517 阅读 · 0 评论 -
AC自动机模板
const int kind=26;struct AC_Automata{ struct node{ node *child[kind]; node *fail; int count; node(){ for(int i=0;i<kind;++i) child[i]=NULL; count=0; fail=NULL; } }; node *root;原创 2014-02-26 18:08:53 · 518 阅读 · 0 评论 -
Tarjan
int low[N],dfn[N],fa[N];int stack[N];int top,sig,time1;void dfs(int pos){ stack[++top]=pos; low[pos]=dfn[pos]=++time1; for(int p=head[pos];p!=-1;p=edge[p].next) { int to=ed原创 2013-08-26 19:50:50 · 527 阅读 · 0 评论 -
二分匹配HK算法
#define nn 21000 //两边的点数均为nnint nx,ny;//建图时左边点从0到nx-1,右边点从nx到nx+ny-1int cx[nn],cy[nn];int dx[nn],dy[nn];int dis;bool bmask[nn];//记录右边是否匹配bool searchpath(){ queueq; dis=INF; memset(d原创 2013-09-23 11:26:45 · 2273 阅读 · 0 评论 -
ZKW费用流
http://www.artofproblemsolving.com/blog/54262http://blog.csdn.net/sdj222555/article/details/7841576POJ2195#include #include #include #include #include #include #include #inc转载 2013-10-03 19:36:30 · 1002 阅读 · 0 评论 -
网络流模板( int型及double型 )
//int型#define N 100#define M 100#define INF 1e8struct{ int to,next; int c;}edge[M];int head[N],level[N],ip;int que[N];bool makelevel(int s,int t){ memset(level,0,sizeof(level));原创 2013-06-20 10:49:04 · 835 阅读 · 0 评论 -
KM算法
引用1:KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B [i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终 成立。KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,转载 2013-10-02 19:33:00 · 862 阅读 · 0 评论 -
SPFA
#define INF 1e9#define N #define M typedef int type;type dis[N];bool visit[N];int que[N];int head[N],ip;struct Edge{ int to,next; type c;}edge[M];void add(int u,int v,type c){原创 2013-08-26 19:36:57 · 442 阅读 · 0 评论 -
最小费用
#define INF 1e9#define N #define M struct Edge{ int to,next,cost,flow;}edge[M];int head[N],ip;int que[N],dis[N],pre[N];bool visit[N];bool spfa(int start,int end,int numpoint){ int fr原创 2013-08-26 19:29:20 · 490 阅读 · 0 评论 -
最大团 Bron–Kerbosch算法
详细讲解 http://www.cnblogs.com/yefeng1627/archive/2013/03/31/2991592.html#define N 110bool g[N][N];int que[N],cnt[N];//cnt[i]记录大于等于i的点集的最大团点数,i点可以不在其中int ans;//ans为最终最大团点数bool dfs(int pos,int原创 2013-08-27 19:50:22 · 4018 阅读 · 0 评论 -
双连通分量
边双连通分量 int dfn[N],low[N],fa[N];int stack[N];int top,time1,sig;void dfs(int pos,int pre){ stack[++top]=pos; dfn[pos]=low[pos]=++time1; for(int p=head[pos];p!=-1;p=edge[p].next) {原创 2013-08-26 19:55:52 · 500 阅读 · 0 评论 -
LCA+RMQ
int time1;int timepoint[N],repoint[N],deep[N]; //N为n*2int dp[N][20];void getdeep(int pos,int pre,int deeptemp){ ++time1; timepoint[pos]=time1; repoint[time1]=pos; deep[time1]=deep原创 2013-08-26 19:49:50 · 602 阅读 · 0 评论 -
带花树(一般图最大匹配)
#define N 45#define SET(a,b) memset(a,b,sizeof(a))deque Q;//g[i][j]存放关系图:i,j是否有边,match[i]存放i所匹配的点//建图开始初始化g//最终匹配方案为match//复杂度O(n^3)//点是从1到n的 bool g[N][N],inque[N],inblossom[N];int match[N],p原创 2013-08-26 19:51:40 · 829 阅读 · 0 评论 -
次小生成树
次小生成树int fa[N];int head[N],end[N];int next[N];int len[N][N];struct Node{ int x,y,c; bool flag;} f[M];int find(int x){ if(x==fa[x]) return x; else return fa[x]=find(fa[x]);}b原创 2013-08-26 19:35:49 · 487 阅读 · 0 评论 -
全局最小割
测试poj 2914 点从0到n-1#define N 510int map[N][N];int sum[N];//记录w(A,i)int v[N]; //给每个点装个马甲,在删点的时候用bool visit[N];//标记是否加入了A集合int solve(int n){ int ans=1e9; REP(i,n) v[i]=i; //最开始每个马甲初始化为自身原创 2013-08-26 19:35:02 · 566 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date K最短路问题(单源点最短路径+A*算法)
算法解释感谢Jarily http://blog.csdn.net/jarily/article/details/8871968/* *算法引入: *在单源点最短路径问题中,实际运用时还需知道最短路径外,次短路或者第三短路; *即要知道多条最短路,并排出其长度增加的顺序,即为K最短路问题; * *算法思想: *单源点最短路径+高级搜索A*; *A*算法结合了启发式方法和形式化方原创 2013-05-23 11:03:24 · 955 阅读 · 1 评论