随笔分类 - 图论 - 最短路
摘要:通过这道题了解二进制分组. 由于我们只需要求两两之间最短路的值而不需要求具体是哪两个点得到的最短路,可以使用二进制分组. 因为如果两个点对答案有贡献,那么这两个点一定在某个二进制位上不同,而 dijkstra 可以方便地求两个集合之间的最短路. 然后注意对于两个方向要分别跑一个 dijkstra.
阅读全文
摘要:显然,我们可以将询问按照规定时间从小到大排序,依次处理. 那么我们显然要求合法的点中从 $n$ 号点出发到达点 $i$ 的最迟时间,我们令这个为 $f[i]$ 而 $f[i]$ 显然可以用最短路来求. 如果求 $n$ 次最短路的话显然超时,但是我们可以对于每一个节点所连边排序,然后每次枚举之前没有扩
阅读全文
摘要:考试的T3,拿暴力+剪枝卡过去了. 没想到 CF 上也能过 ~ code:
阅读全文
摘要:考试T1,建一个反图跑一个最短路就好了~ code:
阅读全文
摘要:这个没啥难的. 只保留可以转移最短路的边,然后拆点跑一个最大流即可.
阅读全文
摘要:由于是无向图,所以可以枚举两个终点,跑两次最短路来更新答案.
阅读全文
摘要:按照横,竖为方向跑一个最短路即可,算是水题~
阅读全文
摘要:此题卡Dijkstra... Code:
阅读全文
摘要:Code:
阅读全文
摘要:Code:
阅读全文
摘要:题解: $k<=20,$ 考虑状压dp. 从 $1$ 号点走到 $n$ 号点经过的点的个数可能会非常多,但是强制要求经过的点一共才 $20$ 个. 而我们发现这个题好就好在可以经过某个城市,而不停留. 故我们在关键点之间进行转移的时候可以直接走最短路,而不用管别的. 令方程 $f[i][j]$ 表示
阅读全文
摘要:不难发现如果一个边的方向改变,就一定不会改回来(这样肯定不是最短路). 所以就直接建双向边,边权为 $0$ 代表不改变,边权为 $1$ 代表改变,跑一个最短路即可.
阅读全文
摘要:复习一下线段树优化建图:1.两颗线段树的叶子节点的编号是公用的. 2.每次连边是要建两个虚拟节点 $p1,p2$ 并在 $p1,p2$ 之间连边.
阅读全文
摘要:把 $Noi2018$ day1t1 想出来还是挺开心的,虽然是一道水题~ 预处理出来 1 号点到其它点的最短路,然后预处理边权从大到小排序后加入前 $i$ 个边的并查集. 这个并查集用可持久化线段树维护可持久化数组来完成. 每次询问时在边集上二分一下,找到对应的并查集,然后找到祖先并输出极小值即可
阅读全文
摘要:打比赛的时候切的,不过竟然 wa 了 14 次~ 挺简单的,直接在跑 $Dijkstra$ 的时候记录一下路径最大值就好了.
阅读全文
摘要:这个题思路十分巧妙,感觉很多题都有类似的套路. 我们发现异或操作其实就是将一个数的二进制的若干个 $0$ 变成 $1$,或者一些 $1$ 变成 $0$. 而每次按照某种顺序一位一位地异或也可以起到同时异或多位的结果. 所以我们每次只要把每个节点连到只该变一位的节点就可以了. 然后就直接跑一个最短路~
阅读全文
摘要:Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 N<=100000 M<=200000 给出一个N个点M条边的无向图,经过一个点的代价是进入和离
阅读全文
摘要:现在看来这道题就非常好理解了. 可以将问题转化为求两点间经过 $k$ 个点的路径最小值,然后枚举剩余的那一个点即可.
阅读全文
摘要:考试的时候是这么想的: 求出每一个点花掉 $i$ 的花费向其他点尽可能走的最长距离,然后二分这个花费,找到第一个大于 $d$ 的就输出$.$然而,我这个记忆化搜索 $TLE$ 的很惨$.$这里讲一下正解: 上面的大题思路是正确的,但是记忆化搜索太慢,考虑倍增 $floyd.$令 $f[i][j]$
阅读全文
摘要:Description http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf Input Output 暑假集训的时候点分
阅读全文

浙公网安备 33010602011771号