“万物归零,万物始壹。”
更新日志
最近做多项式做得有点悬乎,来学点稍微简单点的。明天
初三回来上
0/1 Bfs
考虑下面一个问题:
最短路
给定一个有
数据范围:
容易发现,这就是一个最短路的板子,
那怎么做?有没有线性的最短路算法?
注意到一个特殊条件,即边权范围为
我们贪心的考虑取到更多的 push
都给出一个排序,那就会多一支
0/1 Bfs 的正确性?
考虑维护整个队列都是一个单调递增的,也就是维护一个单调队列。从第一部开始,我们就执行将
所以,当我们当前的转移路径为
那我们来分析一下复杂度,每一个结点至多会被枚举一次,每一条边至多会被转移一次,所以最后的时间复杂度为
当然,此处的
例题
模板题
题目简介
题目名称:小明的游戏 /
题目来源:
评测链接
评测链接
评测链接
形式化题意:给定一张
数据范围:
意识到时间复杂度只能做到
参考实现
1 | std::deque<Pir>Q; |
电路维修
题目简介
题目名称:电路维修
题目来源:
评测链接:https://www.acwing.com/problem/content/177
形式化题意:给定一个大小为 /
或 \
构成,其中 \
表示左上角和右下角可以互通,/
表示左下角和右上角可以互通。你可以进行很多次操作使得某一个网格的 /
或者 \
变成 \
和 /
,问从网格最左上角到最右下角的最少操作次数,多测,无解输出 NO SOLUTION
。
形如:
数据范围:
考虑到将网格图抽象为一张有 \
,则说明
考虑到图中边权只有
AC Code
1 | // ----- Eternally question----- |
B. Frog Traveler
题目简介
题目名称:青蛙的旅行
题目来源:
评测链接:https://codeforces.com/problemset/problem/1601/B
一共有 -1
。
数据范围:
考虑通过建图来解决这个问题。
我们首先将
对
- 对于每一个
,我们从 向 连边; - 对于每一个
,我们从 向 连边。
都是单向边,这样保证了跳一次和滑一次的行动是对应的。但容易发现,这样的图边数是
时间复杂度为
AC Code
1 | // ----- Eternally question----- |
通信线路
题目简介
题目名称:通信线路
题目来源:
评测链接:https://www.acwing.com/problem/content/342/
形式化题意:给定一张
数据范围:
我们设定现在需要求得的答案为
对于当前阈值
最后实现:
AC Code
1 | // ----- Eternally question----- |
E. Cactus Wall
题目简介
题目名称:
题目来源:
评测链接:https://codeforces.com/problemset/problem/1749/E
形式化题意:给定一张 #
表示障碍,障碍不可通过,且不存在任意两个障碍相邻,问原图的基础上,是否存在一种放置障碍的方案使得第
数据范围:
假设我们现在已经得到了最后的障碍图,如果我们从第
那我们再考虑一下,如果我们反转代价,当走到障碍时不记录代价,相反代价为 #
构成的最短路,也就是一条屏障。
考虑建图(
AC Code
1 | // ----- Eternally question----- |
D - Wizard in Maze
题目简介
题目名称:
题目来源:
评测链接:https://atcoder.jp/contests/abc176/tasks/abc176_d
形式化题意:给定一张
数据范围:
建图,对于四连通连代价为
点数 1e7
是可以过的。
AC Code
1 | // ----- Eternally question----- |