随笔分类 - 搜索和图论
摘要:求负环的常用方法,基于spfa:①统计每个点入队的次数,如果某个点入队n次,则说明存在负环。②统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则说明存在负环。 (dis的距离初始化不管为多少都不影响求负环) 通常用第二种方法。 1 bool spfa() 2 { 3 m
阅读全文
摘要:https://www.acwing.com/problem/content/345/ acwing 343.排序 Floyd求传递闭包。可以将$A<B$建图为$g[a][b] = 1$。对只有数值$0$和$1$的邻接矩阵跑$Floyd$。 判断的条件有三个: ①当$g[i][j]$ 和 $g[j]
阅读全文
摘要:https://www.acwing.com/problem/content/385/ acwing 1134.最短路计数 ①$bfs$ 每个点只出队一次,且入队一次 ②$dijkstra$ 每个点第一次出队的序列一定满足拓扑序 ③$bellman-ford(spfa)$ 出队的时候都不一定是满足最
阅读全文
摘要:https://www.acwing.com/problem/content/905/ acwing 903.昂贵的聘礼 把每一个物品看作是一个点,此题是一定有解的,因为最坏的情况也是花费10000金币直接给酋长。所以这题将每个物品看作一个点,以替换的价值向替换的物品连边。就是一个最短路的问题。 不
阅读全文
摘要:https://www.acwing.com/problem/content/description/182/ acwing 182.排书 假设一次移动$i$本书,那么可以移动的方案有$(n - i + 1)$种,可以插入的位置有$(n - i)$种,即方案数有$(n - i + 1)* (n -
阅读全文
摘要:五大剪枝: ①优化搜索顺序:先搜答案数较小的分支,这样有很大概率能将后续的分支剪去 ②排除等效冗余:例如1 2 3 4 要枚举这四个数的和,那么1 + 4和 2 + 3就只需要枚举一次就够了。 ③可行性剪枝:在搜索过程中对当前状态进行检查,如果发现分支已经无法达到递归边界,就执行回溯。 ④最优性剪枝
阅读全文
摘要:spfa算法是对bellman-ford算法的优化,bellman-ford算法遍历每一条边,不断的迭代更新。但是注意到,有许多边的值是不变的,也就是说不需要更新,所以spfa算法基于这一点进行优化,只有值变小的点才有机会去更新其他点。所以我们用一个队列来存储可以更新其他点的点。 1 1.初始化 2
阅读全文
摘要:dijkstra算法是经典的贪心算法。基本的想法是,有两个集合S和E,开始S集合中只有一个起点,E集合中有剩下的其他点。遍历E集合中的所有点,找出与起点距离最近的一个点,将其加入集合S,并用该点去更新起点到其他点的最短路径。(注意该算法只能处理正边权的图) 由动图结合上面的思路,我们可以看出,算法的
阅读全文
摘要:树的深搜: 树的重心 思路:我们可以遍历每一个节点,获取当前节点除外以后的每一个连通块中的点的数量,用一个res变量存储,每次到最后的时候用一个ans存储res中的最小值。 1 #include <iostream> 2 #include <algorithm> 3 #include <cstrin
阅读全文
摘要:指数形枚举:即集合中的元素,选或者不选两种状态,$0$和$1$, 即集合的所有子集。例如$\left \{ 1,2 \right \}$集合中的子集有$\left \{ \right \},\left \{ 1 \right \},\left \{ 2 \right \},\left \{ 1,2
阅读全文
摘要:二分图又称作二部图,是图论中的一种特殊模型。 设$G=(V,E)$是一个无向图,如果顶点$V$可分割为两个互不相交的子集$(A,B)$,并且图中的每条边$(i,j)$所关联的两个顶点$i$和$j$分别属于这两个不同的顶点集$(i \ in \ A,j \ in \ B)$,则称图$G$为一个二分图。
阅读全文
摘要:差分约束通常用来求不等式组的可行解。 差分约束的步骤: 1.先将每个不等式$x_i\leq x_j + w$,转化成一条从$x_j$走到$x_i$的长度为$w$的一条边。 2.找一个超级源点,使得从该源点开始可以遍历所有边。 3.从源点开始求一遍单源最短路,如果存在负环,则原不等式无解,如果没有负环
阅读全文
摘要:有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(stron
阅读全文
摘要:裸的求公共祖先的题目。 思路:用被增法求最近公共祖先,用fa[i][j]表示从i开始,向上走2j 步能走到的所有节点,其中1 <= j <= logn(下取整) 例如上图,f[6][0] = 4, f[6][1] = 2, f[6][2] = -1表示不存在。 做法:1.首先我们需要预处理一个fa数
阅读全文
摘要:一:八数码输出最短路径长度: 第一次做用的暴力做法,用一个变量保存状态,用$bfs$去扩展。但是这样会超时,暴力的话没有优化过不去。最后将$map$改成$unordered\_map$过了。ps:用逆序对判错能快一倍。代码: 1 #include <iostream> 2 #include <str
阅读全文

浙公网安备 33010602011771号