![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
Anonytt
NWU本科在读,退役ACMer。
展开
-
【图论】A*搜索(第k短路)
POJ2449#include<bits/stdc++.h>#pragma GCC optimize(2)#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define eps 0.000000001#define pb push_back#define mem(a,b) memse原创 2020-09-17 20:42:54 · 136 阅读 · 0 评论 -
【图论】网络流一些模板
AcWing.2188 无源汇上下界可行流#include<bits/stdc++.h>#pragma GCC optimize(2)#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define eps 0.000000001#define pb push_back#define原创 2020-08-29 16:22:12 · 217 阅读 · 2 评论 -
【图论】最短路中(最短距离计数+最短距离最大顶点费用)
问题一:最短距离计数例题:(洛谷P1608) https://www.luogu.com.cn/problem/P1608坑点:去重边#include<bits/stdc++.h>#define ll long long#define white 0#define black 1#define grey 2#define endl '\n'#define INF 0x3f3f3f3f3f#define IO ios::sync_with_stdio(false);ci原创 2020-07-19 10:43:02 · 166 阅读 · 0 评论 -
【图论】差分约束
洛谷P5960:https://www.luogu.com.cn/problem/P5960#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define eps 0.000000001#define pb push_back#define原创 2020-07-16 09:57:31 · 235 阅读 · 0 评论 -
【图论】边/点双联通分量
边双连通分量:hihocoder1184#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define eps 0.000000001#define pb push_back#define mem(a,b) memset(a,b,sizeo原创 2020-07-14 15:51:49 · 392 阅读 · 0 评论 -
【图论】2-SAT
模板:洛谷P4782#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define eps 0.000000001#define pb push_back#define mem(a,b) memset(a,b,sizeof(a))#def原创 2020-07-13 10:21:05 · 188 阅读 · 1 评论 -
【图论】树上启发式合并
树上启发式合并(DSU on Tree),是一个在O(nlogn) 时间内解决许多树上问题的有力算法。cf600E板子#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define mem(a,b) memset(a,b,sizeof(a))原创 2020-06-07 19:23:35 · 289 阅读 · 0 评论 -
【图论】点分治
洛谷P3806#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define mem(a,b) memset(a,b,sizeof(a))#define IO ios::sync_with_stdio(false);cin.tie(0);u原创 2020-06-04 20:05:45 · 178 阅读 · 0 评论 -
【图论|数据结构】树链剖分(重链)
时间复杂度:重链剖分O(logn)线段树O(logn)m次询问总:O(m*log(n)*log(n))板子:#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define mem(a,b) memset(a,b,sizeof(a)).原创 2020-05-30 17:10:41 · 329 阅读 · 0 评论 -
【图论】Floyd求最小环
CF1205B:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#include<vector>#define ll long long#define inf 1e8+10using na...原创 2020-05-06 12:37:26 · 306 阅读 · 1 评论 -
图论中的记忆化搜索问题
今天做了一道题,codeforces283B,感觉收获蛮多的,第一次接触了记忆化搜索,对于dfs的认知更进了一层吧抛砖引玉:给你一个n,表示从1~n个数,输入x(x<=n),问x+(x+1)…+n的和,即后缀和,傻子都知道怎么做,最简单的莫过于高斯公式了,但是我们需要从简单问题抽象出更深层次的东西—记忆化搜索#include<bits/stdc++.h>#define m...原创 2020-04-29 16:54:39 · 228 阅读 · 0 评论 -
codeforces698B 【合并树+拆环】
https://codeforces.com/contest/698/problem/B题解:好题!感觉这是cf 1700里面graph中比较有价值的一道题。题意差不多就是把图转成树需要最少几步。第一次接触拆环这个东西还是挺有感触的吧。大体思路就是:不断通过当前点访问其父亲结点,看其父亲结点是不是顶点或者已经被访问。如果父亲节点x已经被访问说明该链是x的一条子链,这在树里面是允许的。判断...原创 2020-04-20 17:04:54 · 248 阅读 · 0 评论 -
【图论】最大流算法(FF,EK,dinic)
模板题:洛谷P3376算法二:FF算法(dfs为主)#include<bits/stdc++.h>#define ll long long#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,n,a) for(int i=n;i>=a;i--)#define endl '\n'#define mem(a) ...原创 2020-04-14 22:40:28 · 499 阅读 · 0 评论 -
【图论】二分图多重匹配 の探讨
这几个题是我觉得比较好的入门二分多重匹配的题。什么是二分多重匹配?简单的来说,就是一个对于左边(或者右边)的点集,每个点都要有单独输出的完备匹配,但是其对应的另一侧点集,每个点可以有多个输入(有些点甚至可能没有输入也有可能),简单的来说就是:目标方可以有多个输入吧,输出方每个只能单个输出,保障每个输出方点均有输出。既然是要多重,那么我们就会有一定的约束条件。比如POJ2289:意思就是每个...原创 2020-04-10 19:56:58 · 639 阅读 · 0 评论 -
【图论】二分图判断&一些常识
(1)二分图的最大匹配匈牙利算法(2)二分图的最小点覆盖二分图的最小点覆盖=二分图的最大匹配求最小点覆盖:从右边所有没有匹配过的点出发,按照增广路的“交替出现”的要求DFS。最终右边没有访问过的点和左边访问过的点组成最小点覆盖。(3)二分图的最少边覆盖二分图的最少边覆盖=点数-二分图的最大匹配证明:先贪心选一组最大匹配的边放进集合,对于剩下的没有匹配的点,随便选一条与之关联的边放进...原创 2020-04-08 14:51:31 · 419 阅读 · 0 评论 -
【图论】二分图匹配(Hungary算法&KM算法&hopcroft-karp算法)
O(n^3)的板子:#include<bits/stdc++.h>#define ll long long#define endl '\n'#define mem(a) memset(a,0,sizeof(a))#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int I...原创 2020-04-06 20:38:37 · 551 阅读 · 0 评论 -
【图论】求树的直径(最长链)
方法有很多,我这里用2种dfs的做法来做方法:先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径#include<iostream>#include<cmath>#include<algorithm>#include<cstring>#include<stack>using nam...原创 2020-04-03 13:03:52 · 502 阅读 · 0 评论 -
【图论】"欧拉回路"の训练报告+总结
首先先给各位看官分享一下题单,接下来的博客将围绕题单顺序展开:这里就不具体介绍什么是"欧拉回路”了吧:在我看来,欧拉回路首先分2大类:有向的或者无向的;具体问题具体分析。板块一:欧拉图的判断:无向欧拉图:1.先用并查集合并所有组,如果并查集组数位1,那么ok2.再看每个点的度数,因为是无向图,就不细分Indeg和outdeg了,统一用degree表示,那么会存在2种情况:即所有的点...原创 2020-03-25 16:54:26 · 364 阅读 · 0 评论 -
【图论】欧拉回路
先上一个板子吧,单向的#include<bits/stdc++.h>#define ll long long#define endl '\n'using namespace std;const int INF=0x3f3f3f3f;const int mod=1e9+7;const int maxn=1e3+10;int tot,n,m,cnt;int head[ma...原创 2020-03-06 16:16:51 · 250 阅读 · 0 评论 -
【图论】朱刘算法路径输出
codeforces240E:感谢博主https://www.cnblogs.com/zsben991126/p/9809730.html#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>#define ...原创 2020-03-05 13:09:05 · 497 阅读 · 0 评论 -
【图论】次小生成树
#include<bits/stdc++.h>#define ll int#define endl '\n'#define mem(a) memset(a,0,sizeof(a))#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int INF=0x3f3f3f3f;co...原创 2020-03-01 22:15:26 · 126 阅读 · 0 评论 -
【图论】朱刘算法求最小树形图
以洛谷P4716为例#include<bits/stdc++.h>#define ll long long#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int M=1e6+5;const int N=1e6+5;const int inf=2e9;struct Ed...原创 2020-02-28 20:59:32 · 248 阅读 · 0 评论 -
【图论】tarjan求LCA(链式前向星)
前向星的写法:#include<bits/stdc++.h>#define ll int#define endl '\n'#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int maxn=5e5+5;bool vis[maxn];int head[maxn],hea[m...原创 2020-02-28 15:43:37 · 221 阅读 · 0 评论 -
【图论】倍增法求LCA
#include<bits/stdc++.h>#define ll long long#define endl '\n'#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int maxn=1e5+5;ll fa[maxn][40],depth[maxn];ll n,m,k...原创 2020-02-27 17:57:51 · 316 阅读 · 0 评论 -
【图论】BFS走迷宫问题
#include<bits/stdc++.h>#define ll long long#define endl '\n'#define mem(a) memset(a,0,sizeof(a))#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int INF=0x3f3f3...原创 2020-02-27 13:27:37 · 322 阅读 · 0 评论 -
【图论】tarjan求割点和桥(无向双联通)
求割点模板:#include<bits/stdc++.h>#define ll long long#define endl '\n'#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int INF=0x3f3f3f3f;const int maxn=2e5+10;vec...原创 2020-02-26 15:49:49 · 323 阅读 · 0 评论 -
【图论】tarjan求强联通
#include<bits/stdc++.h>#define ll long long#define endl '\n'#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int INF=0x3f3f3f3f;const int maxn=2e5+10;vector<...原创 2020-02-25 21:03:01 · 225 阅读 · 0 评论 -
【图论】Johnson算法(多源最短路优化)
样例题的话随便找个Floyd算法自己测一下吧,下面上封装后的Johnson板子:#include<bits/stdc++.h>#define ll long long#define white 0#define black 1#define grey 2#define endl '\n'using namespace std;const int INF=0x3f3f3...原创 2020-02-25 14:03:31 · 1248 阅读 · 1 评论 -
【图论】BellmanFord算法(限制边数/打印路径)
参考例题:AcWing.853有边数限制的最短路ford算法的优势是可以限制最短路边数,并且可以检测负环且输出(SPFA算法无法输出负环).ps:如果第n次迭代仍然会松弛三角不等式,就说明存在一条长度是n+1的最短路径,由抽屉原理,路径中至少存在两个相同的点,说明图中存在负权回路。#include<bits/stdc++.h>#define ll long long#def...原创 2020-02-24 19:50:20 · 529 阅读 · 0 评论 -
【图论】最短路算法小总结
SPFA算法链接:模板:https://blog.csdn.net/Rainfoo/article/details/104459643判环(是否成环/负环):https://blog.csdn.net/Rainfoo/article/details/104481164Floyd算法链接:模板:https://blog.csdn.net/Rainfoo/article/details/10...原创 2020-02-24 17:27:33 · 227 阅读 · 0 评论 -
【图论】SPFA算法判断图中是否存在负环/环
时间复杂度是O(nm),n表示点数,m表示边数板子裸题:AcWing.852#include<bits/stdc++.h>#define ll long long#define endl '\n'using namespace std;const int INF=0x3f3f3f3f;const int maxn=1e5+5;vector<pair<ll,l...原创 2020-02-24 17:16:00 · 913 阅读 · 0 评论 -
【图论】匈牙利算法
以hdoj2063为例封装模板:#include<bits/stdc++.h>#define ll long long#define endl '\n'#define mem(a) memset(a,0,sizeof(a))#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const...原创 2020-02-23 21:36:49 · 270 阅读 · 0 评论 -
【图论】快速最短路SPFA算法
封装后的模板:以hdoj1874为例#include<bits/stdc++.h>#define ll long long#define endl '\n'using namespace std;const int INF=0x3f3f3f3f;const int maxn=5050;vector<pair<ll,ll> > edge[maxn...原创 2020-02-23 14:28:28 · 169 阅读 · 0 评论 -
【图论】拓扑排序
板子题:hihocoder-1174#include<bits/stdc++.h>#define ll long long#define endl '\n'using namespace std;const int INF=0x3f3f3f3f;const int mod=1e9+7;const int maxn=1e5+10;ll n,m,num;ll InDeg[...原创 2020-02-22 16:37:45 · 198 阅读 · 0 评论 -
【图论】Floyd算法(求2点间最短路径)
来道例题吧:hdu1874AC代码如下:#include<bits/stdc++.h>using namespace std;#define ll long long#define INF 0x3f3f3f3fconst int maxn=205;int n,m;int mp[maxn][maxn];int main(){ while(cin>>...原创 2020-01-23 19:41:28 · 458 阅读 · 0 评论 -
【图论】单源最短路径Dijkstra算法
优化版的最先队列代码板子写法:#include<iostream>#include<algorithm>#include<queue>#define MAX 100005#define INF 0x3f3f3f3f#define WHITE 0#define BLACK 1#define GRAY 2using namespace std;...原创 2020-01-23 18:50:20 · 317 阅读 · 0 评论 -
【图论】最小生成树(Prim算法/Kruskal算法)
Prim算法就是先从任意一点开始,接下来找与其距离最小的选进去。每次选择已有点最接近距离的点并且标记#include<bits/stdc++.h>#define IO ios::sync_with_stdio(false);cin.tie(0);using namespace std;const int maxn= 5050;const int inf = 0x3f3f3f...原创 2020-01-22 18:54:53 · 317 阅读 · 0 评论