1.BFS及其运用
引言
BFS 是求解不带权有向图最短路的最高效做法。
它与 DAG 最短路的动态规划算法,共同构成最短路唯二的线性时间复杂度算法。
扩展:0-1 BFS、多源点 BFS。
- 0-1 BFS:
因为队列里面不降,且极差为,所以用deque,边权为加在队头,否则加在对尾。
练习
(NCPC 2017)
-
题意
有 n 种性格,每个性格由 k 个 01 字符组成,
1 表示具有某种属性,0 表示不具有。
定义两种性格 a,b 的差异为 a 具有某种属性而 b 不具有,
或 b 具有某种属性而 a 不具有的属性个数。
现在请你自己定义一种性格,赋予每种属性的值,使得和其
他性格的差异最小的一个尽可能大。
n ≤ 10^5, k ≤ 20。 -
思路
很小,把每一种性格状态一个的点。每个点向改变一个属性的点连边。从个点开始bfs,每个点第一次被bfs到的距离即到个点中的最短距离,找最短距离最长的即可。
补图最短路,HDU 5876
- 题意
边权为,求补图最短路。
- 思路
用BFS,好处是每个点只会被更新(入队)一次。
关键是边很多,每次队顶找边很慢,将入过队的点存入一个set里,每次直接找,原图没有连边会从set里面删去,其余的也是原图边的复杂度。
2.Floyd 及其应用
引言
Floyd 算法用于求任意两点最短路,对于图没有任何限制,
允许负权边,只要没有负环。
Floyd 算法时间复杂度 ,常数非常小。
图的最小环
给定一个个点的无向图,每条边有边权(大于 0)。
求对每一节点,包含该点的最小环长是多少。
- 最短路径树
构造最短路径树,枚举非树边,复杂度。
3.Dijkstra 的应用
重建铁路
-
题意
某王国由 n 个城市和 m 条双向道路构成,每条道路有相应
的通行时间。
该王国首都为 1 号城市,该城市和某些城市间还连有 k 条
铁路,每条铁路有相应的通行时间。
现在为了节省运营成本,问最多能去掉多少条铁路,使得首
都到其他城市的最短距离不变。 -
思路
最短路径树,dj过程中优先选公路。答案是非树边中铁路的个数。
不定方程
- 思路
找到所有,所有%a[1]=r的方案即为%a[1]=r的最短路径()加上若干个得来的。
因此找同余最短路,可以找到答案的集合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人