上一页 1 2 3 4 5 6 ··· 8 下一页
摘要: 匈牙利算法 二分图分为a边b边 a边每一个都遍历,然后某一个匹配到了b其中一个,如果a边中其他的也匹配到了这一个,那就让前面那个点先尝试能不能换一个如果可以就成功匹配 如果不行就寻找下一个点 #include<bits/stdc++.h> using namespace std; const int 阅读全文
posted @ 2022-10-25 14:58 天然气之子 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 用深度优先法,遍历每一个节点然后从他开始子节点,子节点和自己的颜色不一样就可以。 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j 阅读全文
posted @ 2022-10-25 14:01 天然气之子 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 把所有边按照权重值从小到大排序,然后一一收入集合,利用联通集判断一条边的两个点是否在一个联通集中 如果在就不收录这条边 #include<bits/stdc++.h> using namespace std; const int N = 100010, M = 200010; int n, m; i 阅读全文
posted @ 2022-10-25 13:19 天然气之子 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 最小生成树就是把很多个点以及很多条有权边,生成最少且最小的边把所有点连在一起。 #include<bits/stdc++.h> using namespace std; const int N = 510, INF = 0x3f3f3f3f; int n, m; int g[N][N]; //储存边 阅读全文
posted @ 2022-10-24 23:23 天然气之子 阅读(15) 评论(0) 推荐(0) 编辑
摘要: #include<bits/stdc++.h> using namespace std; const int N = 510, M = 10010; int n, m, k; int dist[N], backup[N]; struct Edge { int a, b, w; }edges[M]; 阅读全文
posted @ 2022-10-19 21:29 天然气之子 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 时间复杂度为n^2,这个算法之所以不能计算有负权路的原因是他不会走走过的点,比如 (a, b, -1) (a, c, 1) (c, b, -6) Dijkstra算法可以很好地解决无负权图的最短路径问题,但如果出现了负权边,Dijkstra算法就会失效,例如图10-39中设置A为源点时,首先会将点B 阅读全文
posted @ 2022-10-18 13:19 天然气之子 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 用深度优先解决n皇后问题(一条路走到黑不行再换路) #include<bits/stdc++.h> using namespace std; const int N = 20; char g[N][N]; //这个储存棋盘 bool col[N], dg[N], udg[N]; //记录同列 同对角 阅读全文
posted @ 2022-10-10 23:35 天然气之子 阅读(16) 评论(0) 推荐(0) 编辑
摘要: h[]数组记录的是当前余数的头指针(这个相当于链表的头插法),en[]数组就是记录链表的指向 #include <cstring> #include <iostream> using namespace std; const int N = 1e5 + 3; // 取大于1e5的第一个质数,取质数冲 阅读全文
posted @ 2022-09-28 11:26 天然气之子 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 这里是维护一个m大小的堆,每一个比堆顶小的数字都放进来进行一次heapify。 题目的意思我以为是只需要输出前m小的数字不需要排序,但是看答案意思需要,所以最后麻烦了一下 #include<bits/stdc++.h> using namespace std; const int N = 10001 阅读全文
posted @ 2022-09-24 11:34 天然气之子 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 并查集: 将两个集合合并 询问两个元素是否在同一个集合里 基本原理: 每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点储存他的父节点,p[x]表示x的父节点 判断父节点 if(p[x] == x) 如何求x的集合编号: while(p[x] != x) x = p[x] 如何合并两个集 阅读全文
posted @ 2022-09-20 12:35 天然气之子 阅读(16) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 8 下一页