KM算法
摘要:匈牙利算的是无权边二分图,而KM算法算的是有权边二分图 参考博客:https://blog.csdn.net/chenshibo17/article/details/79933191 模板代码:
阅读全文
匈牙利算法
摘要:参考博客: https://blog.csdn.net/sunny_hun/article/details/80627351 模板:
阅读全文
拓扑排序
摘要:参考博客: https://www.cnblogs.com/tonghao/p/4721072.html 模板代码: 使用邻接矩阵存储边
阅读全文
spfa算法
摘要:作为能够判断负权边的算法,效率比Bellman-Ford要高,比较实用 参考博客:http://keyblog.cn/article-21.html https://blog.csdn.net/sxy201658506207/article/details/78779045 使用邻接矩阵 使用深搜进
阅读全文
广搜+深搜(搜索最短路径+最短步数)
摘要:#include #include #include #include #include using namespace std; const int maxn=10; struct P { int x,y; }point[maxn]; struct PP { int fx,fy; }path[maxn][maxn]; int num[maxn][maxn...
阅读全文
输出欧拉路径(并查集+佛罗来算法)
摘要:#include using namespace std; const int maxn=100; stacks;/*输出欧拉回路*/ vectorway[maxn];/*记录与每个点相连接的点*/ int edge[maxn][maxn];/*记录两点是否联通*/ int in[maxn];/*记录每个度的入度*/ int fa[maxn];/*用做并查集查询图是否联通*/ int n,m; ...
阅读全文
背包问题
摘要:一、01背包 问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 解答: 状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 即将问题分解为“将前i件物品放入容量为v的背包中
阅读全文
归并排序求逆序对
摘要:#include void Merge(int ,int ,int ); void mergeSort(int ,int ); int ch[20000],temp[20000]; int count = 0; void mergeSort(int lo,int hi) { if(lo ch[j]) { count+= mid - i ...
阅读全文
博弈论
摘要:一、巴什博弈 假设要报 n 个数,每次最少报一个,最多报 m 个,可得状态式: 若 r =0.先手必败,否则先手必胜 二、威佐夫博弈 有两堆若干物品,两个人轮流以其中取至少一件物品,至多不限,或从两堆中取相同件物品,最后取完者胜,可得: 设两堆初始为 x, y,且 x <y.则令 z = y-x,记
阅读全文
线段树
摘要:#define maxn 100007 //元素总个数 #define ls l,m,rt>1; //左右递归 Build(l,m,rt>1; //根据条件判断往左子树调用还是往右 if(L >1; PushDown(rt,m-l+1,r-m);//下推标记 //这里判断左右子树跟[L,R]有无交集,有交集才递归 ...
阅读全文
Dijkstra算法
摘要:相比于Floyd算法的复杂度,Dijkstra算法的时间复杂度要低很多 同样用邻接矩阵来存储边,用一个一维数组更新起点到其他点的距离,代码如下:
阅读全文
最短路径Floyed算法
摘要:使用有向图的邻接矩阵的概念,代码如下: 这是只过一个中继点的情况(应该是吧。。。),对其进行优化后发现可以进行动态规划,代码如下: 抽象理解就是先算u,v只经过第1个点的最短路径,然后在此基础上再算过第1,2个点的最短路径,动态方程为a[i][j]=min(a[i][j],a[i][k]+a[k][
阅读全文
克鲁斯卡尔算法(最小生成树)
摘要:将图中的边按权值大小从小到大排序后,若有n个顶点则选前n-1条边,用并查集的思想进行连通后得到的树即为最小生成树,代码如下:
阅读全文
并查集
摘要:并查集是一种经常用于判断图中是否有环的算法,重点是将连通的分支用树的形式来表示,代码如下:
阅读全文
手动开根
摘要:这道题让我深深的感到我tm数学到底有多差。。。 做题解前先看一下什么叫手动开根: https://jingyan.baidu.com/article/4f7d5712f663371a20192797.html 这是手动开根的c++代码实现:
阅读全文
卢卡斯定理
摘要:(说实话推断过程不是我这种弱鸡能看懂的,直接上结论。。。) 卢卡斯定理: C(n, m) % p = (C(n/p, m/p) % p) * (C(n%p, m%p) % p) % p
阅读全文
同余与模算术
摘要:以下三条常用式子: (a+b)modn=((amodn)+(bmodn))modn (a-b)modn=((amodn)-(bmodn)+n)modn abmodn=(amodn)(bmodn)modn 大整数取模: 幂取模:
阅读全文
扩展欧几里得算法
摘要:当需找出一对整数(x,y)使得ax+by=gdc(a,b)时,可使用扩展欧几里得算法; 注意,a需大于b,当a<0时需|a|x+by=gdc(|a|,b) 若方程ax+by=c的一组整数解为(x,y),则它的任意整数解都可以写成(x+kb,x+ka),其中a=a/gcd(a,b),b=b/gcd(a
阅读全文