• 2024-10-31最短路
    Floyd算法BFS求01最短路题目链接对于边权只有0和1的图,可以用BFS+deque求最短路具体做法:前端队列存由0边更新的点,后端存由1更新的点,每次松弛从前端取比较好想,由于是BFS,可以认为本层转移下,0边转移的点dis都相等,1边转移的点dis都相等(不一定正确),那么从前面取出来的点通过0边松弛
  • 2024-10-23模板复习计划
    进度模板SPFA(不带负环)FloydDijkstra拓扑排序-[已完成]单调栈单调队列Trie树KMP线性乘法逆元线性任意n个数乘法逆元-[已完成]线段树2带负环的SPFAexgcdTarjan找强连通分量差分约束康托展开网络
  • 2024-10-20A*,spfa,和如何利用spfa判断负环
    A*即是在dij的思路上加上预估函数注意:此处的欧式距离即为max(|x1-x2|,|y1-y2|); spfa算法每个点至多被松弛n-1次;我们利用队列来记录哪些点被松弛过(因为被松弛过说明距离变的更小,就有机会更新别人),一个点一旦出队,即取消标记那么我们又该如何判断负环呢?
  • 2024-09-24洛谷 P3385 【模板】负环
    题目链接:P3385【模板】负环思路    负环模版题,套一个SPFA板子,判断一下每个节点进入队列的次数,当进入队列的次数大于等于n次时,表示当前节点迭代次数超过了n-1次,即为存在负环。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstllI
  • 2024-09-07最短路
    Bellman-Ford这是一种暴力求解单源最短路的方法。如果图不存在负环,那么任意两点之间的最短路一定不经过相同的点。假设\(A\)到\(E\)的最短路径为\(A\toB\toC\toD\toE\),那么\(A\toB\toC\toD\)一定为\(A\)到\(C\)的最短路。记\(dis_{x}\)表示起点\(s
  • 2024-08-30AcWing852.spfa判断负环
    cnt数组表示:cnt【j】表示边j#include<iostream>#include<cstring>#include<algorithm>#include<queue>#defineN2010#defineM10010usingnamespacestd;intn,m;inth[N],w[M],e[M],ne[M],idx;intdis[N],cnt[N];boolst[N];voidadd(inta,i
  • 2024-08-13最短路算法
    存在最短路的前提不存在负环。链接还是OIWiki好啊~~Floyd算法两两间最短路,可判负环。时间复杂度\(O(n^3)\)。像DP的思路一样。设\(f_{k,x,y}\)表示允许经过\(1\simk\)的点,\(x\toy\)的最短距离。\(O(n^3)\)的DP即可。按照\(k,x,y\)的顺序循环,每次与\(
  • 2024-07-22【图论】【模板】判断负环
    使用SPFA算法判断负环前言判断负环是属于判定性的问题,常与二分结合起来。例题AcWing852.spfa判断负环思路可以使用SPFA进行判断。因为两点之间至多有\(n-1\)条边,所以当一个点的最短路径经过的边数大于等于\(n\)时,说明有负环。代码#include<bits/stdc++.h>
  • 2024-07-09SPFA算法模板和判断负环
    851.spfa求最短路-AcWing题库852.spfa判断负环-AcWing题库#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn,m,k;inth[N],e[N],idx,w[N],ne[N];intq[N],tt=-1,hh=0;voidadd(inta,intb,intc){ e[idx]=b; ne[idx]=h[a]; w[idx]=c;
  • 2024-06-09SPFA 判负环
    SPFA判负环大家好,我是Weekoder!今天我要讲的是接上一次SPFA最短路算法衍生而来的一个应用——判断图中是否存在负环。我将介绍两种判负环的方法,都基于SPFA。负环的概念负环是什么?负环就是在图中的一个环,其边权之和为负数。如下图:可以看到,这个环的权值和是\((-2)+(-1)+1
  • 2024-06-09负环的习题和应用
    \(\text{update2024/6/9:}\)文中提到了速度较快的\(\text{DFS-SPFA}\),虽然速度较好,但是容易被卡,例如模板!大家好,我是Weekoder!今天要讲的是负环的一些习题与负环在题目中的应用。一共有\(3\)个例题,分别为:\(\color{#52C41A}\texttt{P2136}\),\(\color{#9D3DCF}\texttt{P2868
  • 2024-05-12Floyd
    为数不多的全源最短路算法,全源即,全部点为原点,即算出任意两个点之间的最短路径。前提条件,没有负环。可有负权。因为中心思想是动态规划,所以有很强的性质,做题的时候注意利用。中心思想中心思想为动态规划。现在我们设f[k][i][j]表示从点\(i\)到点\(j\),只经过\(1\)到\(k
  • 2024-05-12Bellman_Ford
    基本上用不到的算法,和高精度一样,不常用,用到了又无可代替常用于限制边数的最短路算法。使用范围可以处理任意边权的图,可以处理负环,可以判断负环。时间复杂度\(O(nm)\)。因为太慢了,在求最短路的时候基本用不到,但是它的优化版SPFA则大大优化了时间复杂度,算是最短路里最好用的算
  • 2024-05-08图上的环和最长路
    1.有向图找环HDOJ3342LegalorNothttps://acm.hdu.edu.cn/showproblem.php?pid=3342题意:给一个\(N\)个点\(N\)条边的有向图,第\(i(1\leqM)\)条边从\(a_i\)连向\(b_i\),询问该图是否无环。\(2\leqN,M\leq100,0\leqa_i,b_i\leqN-1\)题解:建图然后
  • 2024-04-04高手训练 负环 题解
    题目链接方向:枚举点的个数,找出其中边权和为负数的最小值。直接枚举显然会超时,不妨考虑使用倍增凑出点的个数(注意:点数不完全有单调性,但是后面会提到如何转化处理)。先预处理出\(dis_{t,i,j}\)表示经过\(t\)条边,从\(i\rightarrowj\)的最短路长度。那么类似\(Floyed\)显然
  • 2024-03-27[普及+] 模板口胡
    差分约束系统省流:给出\(n\)个数,\(m\)个不等式,每个形如\(x_a-x_b\lew\),求通解。转化一下,\(x_a\lex_b+w\)这不就是图论点转移吗,连一条\(x_b\tox_a\)权值为\(w\)的边,最后要求通解即求当前点集权值满足所有边。不妨这样想,确定一个点,再更新其它点。这不就是最短路吗
  • 2024-03-19Floyd算法学习笔记
    Floyd算法学习笔记前言如有错误,欢迎各位dalao批评指出。前置芝士:1.邻接矩阵(Floyd要用邻接矩阵存图)2.动态规划思想(最好学过,没学过也没有太大影响)1.Floyd所解决问题的类型我们可以发现,如Dijkstra,SPFA,BellmanFord一类的最短路算法都是解决单源点最短路问题,也就是确
  • 2024-03-11ARC173D-Bracket Walk
    题意给定一个\(n\)个点\(m\)条边的有向强联通图,每条边为'('或')',问是否存在一条回路,使得每条边至少经过一次,且路径的边按顺序拼接后形成的字符串为合法括号序列输出'Yes'or'No'\(n\le4000\)、\(m\le8000\)做法边'('、')'分别替换成权值\(+1,-1\)观察1:题意可以转化成:找
  • 2024-02-15找负环(图论基础)
    目录负环spfa找负环方法一方法二实际效果负环环内路径上的权值和为负。spfa找负环两种基本的方法统计每一个点的入队次数,如果一个点入队了n次,则说明存在负环统计当前每个点中的最短路中所包含的边数,如果当前某个点的最短路所包含的边数大于等于n,也说明存在负环实际上两
  • 2024-02-08负环与差分约束
    1.负环负环是指一个环的边权值之和为负数。有负环的图没有最短路。要判断一个图是否有负环,一般使用Bellman-Ford算法或SPFA算法。Bellman-Ford如果一个图没有负环的话,最短路径最多会经过\(N-1\)条边。如果有,那么在进行\(N\)次更新后还能继续更新。于是用Bellman-F
  • 2024-01-27【学习笔记】差分约束
    前言2024.1.27\(huge\)在讲不要忽略算法的细节时,以最短路和差分约束为例子。发现自己差分约束忘得差不多了,于是就有了这篇博客。负环在一张图中,若存在一条边权之和为负数的回路,则称这个回路为负环。在一张图中,若存在一条边权之和为正数的回路,则称这个回路为正环。如果一张
  • 2023-12-06P3385 【模板】负环
    不能用dijkstra算法的原因(个人拙见):#include<bits/stdc++.h>usingnamespacestd;intn,m;struct{inthead;intto;intval;}edge[10004];intlen=0;intlatest[2005]={0};voidadd(intu,intv,intw){edge[++len].to=v;edge[len].val=w;
  • 2023-11-01spfa算法(求最短路和判断是否存在负环)floyd求最短路(11/1)
    #include<iostream>#include<cstring>#include<algorithm>#include<queue>usingnamespacestd;constintN=100010;intn,m;inth[N];intne[N];inte[N],w[N],idx=0;intdist[N];boolst[N];voidadd(inta,intb,intc){ne[idx]=
  • 2023-10-10最短路
    前言定义从某一点出发到某一点的最短路性质对于边长为正的图:任意两个节点之间的最短路,不会经过重复的节点。任意两个节点之间的最短路,不会经过重复的边。任意两个节点之间的最短路,任意一条的节点数不会超过\(n\),边数不会超过\(n-1\)。记号\(n\)为图上点的数目
  • 2023-10-09最短路
    前言定义从某一点出发到某一点的最短路性质对于边长为正的图:任意两个节点之间的最短路,不会经过重复的节点。任意两个节点之间的最短路,不会经过重复的边。任意两个节点之间的最短路,任意一条的节点数不会超过\(n\),边数不会超过\(n-1\)。记号\(n\)为图上点的数目