• 算法 - 星期几模拟

    题目:ACwing1341. 十三号星期五 题目来源:https://www.acwing.com/problem/content/1343/ 描述: 十三号星期五真的很不常见吗? 每个月的十三号是星期五的频率是否比一周中的其他几天低? 请编写一个程序,计算 N 年内每个月的 13 号是星期...
  • 算法 - 区间合并

    题目: ACwing 1343. 挤牛奶 题目来源: https://www.acwing.com/problem/content/1345/ 描述: 每天早上 5 点,三名农夫去牛场给奶牛们挤奶。 现在从 5 点开始按秒计时,第一名农夫在第 300 秒开始给牛挤奶,并在第 1000 秒停止...
  • 搜索与图论 - Kruskal

    Kruskal 是求最小生成树的算法,时间复杂度是$O(nlog n)$。 算法基本流程: 对所有边进行排序,按照从小到大进行排序 枚举每条边:如果两个点合并过,合并两个点,结果 += 边的长度(利用并查集) AcWing 859. Kruskal算法求最小生成树 来源: https://...
  • 搜索与图论 - Floyd

    floyd 是一个求多源最短路问题,可以存在负环。时间复杂度是$O(n^3)$, 基本思路是基于动态规划的。 算法的而基本流程: 1234for k <- 1 to n: for i <- 1 to n: for j <- 1 to n: ...
  • 搜索与图论 - Prim

    Prim 是求一个最小生成树的算法。最小生成树 。 Prim算法的时间复杂度是$O(n^2)$,算法流程和Dijkstra算法非常相似。算法原理也是基于贪心实现的。 算法基本流程: 首先找到距离最近点, 初始化结果为0 把距离最近的点加入到集合中去,res += dist[t], 然后利用最...
  • 搜索与图论 - SPFA

    SPFA 算法可以求单源负权边的最短路问题,时间复杂度最坏$O(nm)$, 一般是$O(n)$。SPFA求最短路的时候不能有负环,但是可以利用SPFA判断是否有负环。 算法基本流程, 流程和BFS有点类似: 首先创建一个队列,然后起点入队列。 然后每次出队列,扩展队列,更新距离最小值 最后输...
  • 搜索与图论 - 二分图

    二分图: 指的是一个图可以分成两个集合,假如黑色在一个集合,白色在一个集合。 二分图的性质: 当且仅当图中不含有奇数环(图中环的边数不为奇数) 通过染色法来判断一个图是不是二分图 AcWing 860. 染色法判定二分图 来源: https://www.acwing.com/problem/c...
  • 搜索与图论 - 匈牙利算法

    匈牙利算法讲的是二分图的最大匹配数。时间复杂度最坏$O(nm)$, 实际上远小于$O(nm)$。给定一个二分图,然后找到最大的匹配对数(数据不能重复使用)。 匈牙利算法也是基于贪心的一个算法。属于不到南墙终不回。算法基本流程: 为每个i找一个j,如果存在关系,并且j没有匹配,就让他两匹配 如...
  • 搜索与图论 - 堆优化版Dijkstra算法

    算法的时间复杂度是$O(nlogm)$ 算法的基本思路的基本思路与朴树版本的Dijkstra的差别在于: 每次寻找通过遍历的方式寻找最小值$O(n)$。变为使用堆进行优化$O(log n)$ 基本思路: 首先初始化所有点为正无穷,初始起点为0 进行n - 1次循环 每次利用堆找到最小值 然后...
  • 搜索与图论 - 拓扑序列

    拓扑序的主要应用就是检测图中是否有环。如果图中没有环,能生成一个拓扑序列,一般拓扑序列不唯一。 引入两个概念, “入度” 和 “出度”: 入度: 指向节点i的边有多少条 出度: 节点i指出去的边有多少条 拓扑排序的基本思路: 首先把入度为0的点加入到队列里面去 然后依次弹出队头,扩展对头...