随笔分类 -  ACM-图论

摘要:网络流的最后一步。之前已经写了最大流的Dinic,SAP,EK这三种算法。 1 #include "stdafx.h" 2 #include <iostream> 3 #include <algorithm> 4 #include <queue> 5 #include <math.h> 6 #inc 阅读全文
posted @ 2020-11-20 19:57 Lovaer 阅读(102) 评论(0) 推荐(1) 编辑
摘要:1 //tarjian离线求LCA 2 #include<cstdio> 3 #define N 420000 4 struct hehe{ 5 int next; 6 int to; 7 int lca; 8 }; 9 hehe edge[N];//树的链表 10 hehe qedge[N];// 阅读全文
posted @ 2020-09-15 09:50 Lovaer 阅读(108) 评论(0) 推荐(0) 编辑
摘要:1 //求强联通分量 2 #include<bits/stdc++.h> 3 const int N=1e5+7; 4 const int M=1e5+7; 5 struct node{ 6 int v,next; 7 }e[M]; 8 int head[N],cnt; 9 int p[N],st[ 阅读全文
posted @ 2020-09-12 20:24 Lovaer 阅读(118) 评论(0) 推荐(0) 编辑
摘要:最近发现struct板子真的好用。 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl 阅读全文
posted @ 2020-04-13 17:55 Lovaer 阅读(341) 评论(0) 推荐(1) 编辑
摘要:1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",& 阅读全文
posted @ 2020-03-15 21:13 Lovaer 阅读(178) 评论(0) 推荐(0) 编辑
摘要:给一个有向图,求最小树形图的权值。 用in存图,用pre记录前驱节点。 1 #include<iostream> 2 using namespace std; 3 #include<cstdio> 4 #include<cstring> 5 #define MAXN 1005 6 #define I 阅读全文
posted @ 2019-12-09 00:50 Lovaer 阅读(236) 评论(0) 推荐(1) 编辑
摘要:k叉赫夫曼树:每次合并k个权值最小的节点,用优先队列存,直到只剩下不到k个节点 首先判满,计算多余节点个数,是(N-1)mod(k-1)。然后有两种方法补满, ①:把(多余的+1)个合并成1个 ②:缺少的用0来补充 有人说用优先队列太慢,会被卡log方,于是可以考虑用数组存储被合并的点,被合并的点的 阅读全文
posted @ 2019-12-05 09:50 Lovaer 阅读(535) 评论(0) 推荐(2) 编辑
摘要:有个两百多行的板子,没有注释,看着好像挺对的,先挖个坑以后填。 1 #include <bits/stdc++.h> 2 #define N 810 3 using namespace std; 4 typedef long long ll; 5 inline int read() 6 { 7 in 阅读全文
posted @ 2019-11-30 14:24 Lovaer 阅读(620) 评论(0) 推荐(1) 编辑
摘要:俗称HK算法。和匈牙利算法一个功能,但是复杂度更优。匈牙利算法复杂度O(VE),HK算法复杂度O(sqrt(V)*E)。 但是很容易写崩,别问我怎么知道的。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXN=500;/ 阅读全文
posted @ 2019-11-29 00:03 Lovaer 阅读(653) 评论(0) 推荐(1) 编辑
摘要:对于一个图G(V,E),它的匹配M是二元组(u,v)组成的集合,其中u,v∈V,(u,v)∈E,并且M中不存在重复的点。 当|M|最大的时候,我们称M为G的最大匹配。 当G是一个二分图的时候,它的最大匹配可以用经典的匈牙利算法或网络流算法求解。然而当G是一个一般的图时,直接进行增广就变得不可行了,这 阅读全文
posted @ 2019-11-28 09:05 Lovaer 阅读(272) 评论(0) 推荐(2) 编辑
摘要:二分图最大带权匹配。 输入点的个数和各边权值,输出最大匹配的权值和。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 7 const int N=310; 8 const i 阅读全文
posted @ 2019-11-27 20:54 Lovaer 阅读(435) 评论(0) 推荐(2) 编辑
摘要:网络流主要解决三种问题:最大流、最小流和费用流。 最大流算法主要有三种:EK算法、Dinic算法、SAP算法。 本篇博客是关于SAP算法的。最坏的情况下,SAP算法将达到复杂度O(VE2)。 1 #include <iostream> 2 #include <cstdio> 3 #include < 阅读全文
posted @ 2019-11-23 19:21 Lovaer 阅读(795) 评论(0) 推荐(1) 编辑
摘要:网络流主要解决三种问题:最大流、最小流和费用流。 最大流算法主要有三种:EK算法、Dinic算法、SAP算法。 本篇博客是关于Dinic算法的。最坏的情况下,Dinic算法将达到复杂度O(V2E)。 1 #include <iostream> 2 #include <cstdio> 3 #inclu 阅读全文
posted @ 2019-11-21 23:24 Lovaer 阅读(281) 评论(1) 推荐(1) 编辑
摘要:网络流主要解决三种问题:最大流、最小流和费用流。 最大流算法主要有三种:EK算法、Dinic算法、SAP算法 本篇博客是关于EK算法的。最坏的情况下,EK算法将达到复杂度O(VE2)。 1 #include <iostream> 2 #include <queue> 3 #include<strin 阅读全文
posted @ 2019-11-12 22:14 Lovaer 阅读(415) 评论(0) 推荐(1) 编辑
摘要:首先求出最小生成树,我们枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定会形成环,那么我们在这条环路中取出一条最长的路(除了新加入的那一条边)。最终我们得到的权值就是次小生成树的权值。 prim算法实现: 我们在求解次小生成树的时候我们要使用一个二维数组maxd[i][j]表示 阅读全文
posted @ 2019-11-11 09:34 Lovaer 阅读(198) 评论(0) 推荐(1) 编辑
摘要:简单的纯板。prim算法适合稠密图,kruskal算法适合简单图。prim算法复杂度O(n^2),n是图中点的个数,kruskal算法复杂度O(eloge),e为图中边的条数。值得一提的是,加入堆优化的prim算法复杂度可达O(nloge)。 首先放一个很喜欢的kruskal。 1 #include 阅读全文
posted @ 2019-11-02 23:56 Lovaer 阅读(227) 评论(0) 推荐(1) 编辑
摘要:1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",& 阅读全文
posted @ 2019-09-02 10:46 Lovaer 阅读(263) 评论(1) 推荐(1) 编辑
摘要:1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",& 阅读全文
posted @ 2019-08-28 11:02 Lovaer 阅读(178) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示