![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【模板集】-图论
文章平均质量分 77
tystrwor
这个作者很懒,什么都没留下…
展开
-
【LCA模板】
倍增法1.N是点数,M是边数.下标范围1-n。2.先init1()初始化-> add(x,y),dfs()->init2()->LCA(x,y)4.dep存的是深度,fa[i][j]存的是j向上走(1<<i)步的祖宗节点为位置const int N=300100;const int M=300100;int fa[20][N],head[N],dep[N];int nu,n原创 2017-09-06 09:49:00 · 247 阅读 · 0 评论 -
【强连通分量模板】
1.调用时先初始化 用add(x,y)增加边,调用solve()后才能缩点2.N是点数 M是边数 (点是从1到n)3.bcc 记录第i个连通分量的点 belong表示点属于哪个连通分量 4.g是缩点后的树 5.du记录缩点后的图的每个联通分支出度(不等于新树的每点的出度)const int N=10010; const int M=100100; vector bcc[N],g原创 2017-09-04 16:27:43 · 247 阅读 · 0 评论 -
【最大流模板】
一、FF算法1.先调用init()初始化,然后max_flow(s,t)最大流,s为源点,t为汇点。2.N是点数,n是点数,m是边数。3.cap容量,跑完最大流后cap为零即为割边。const int N=500;const int INF=0x3f3f3f3f;struct edge{ int to,cap, rev; edge(int x=0,int原创 2017-09-17 22:19:47 · 162 阅读 · 0 评论 -
【最小费用流】
一、有时间再完善const int INF=0x3f3f3f3f;const int MAXN=66;struct edge{ int to,cap,cost,rev; edge(int x,int y,int z,int w) { to=x;cost=y;cap=z;rev=w; }};vector g[MAXN];int pr原创 2017-09-21 22:21:26 · 220 阅读 · 0 评论 -
【双连通分量模板】
一、点双联通分量1.调用init()初始化。然后调用find_vbcc();求解。2.N,n是点数,M,m是边数。3.belong表示该点属于哪一个联通分量(割顶无意义),bcc表示该联通分量的点,isc表示该点是否为割顶,bcc_cnt点双联通分支数量。const int N=10010;const int M=200020;struct edge{ int f原创 2017-09-21 19:57:49 · 415 阅读 · 0 评论 -
【二分图最大匹配-匈牙利算法及其优化算法模板】
一、匈牙利算法1.N是点数,下标1-n2.用g.push_back建图后,直接调用max_macth()得到最大二分匹配3.最终,liky表示与“y轴”上i匹配的值。const int N=1000;vector g[N];int lik[N],n,m;bool visy[N];bool dfs(int x){ for(int i=0;i<g[x].si原创 2017-09-06 15:45:05 · 634 阅读 · 0 评论