随笔分类 -  图论-最短路

摘要:题意:求无向图从起点到终点最多停留k次的最短路 设d[i][j]表示走了i步后到达点j的最小代价,看似最短路,实则dp,因为求解过程中i是递增的,不存在环,直接递推求解即可 什么?你说最短路也属于dp?那没事了 1 #include<bits/stdc++.h> 2 using namespace 阅读全文
posted @ 2021-04-05 13:43 jrltx 阅读(81) 评论(0) 推荐(0)
摘要:题目链接 蓝书上的例题,题意是给定一个有向图,边带权,每次操作可以选择一个点,把以该点为终点的边权都-1,以该点为起点的边权都+1,要使得最小的边权最大,问最大值是多少 题解是转化成差分约束问题求解,但实际通过观察可发现,每个环的边权是固定的,因此相当于求平均值最小的环,二分+判负环即可 SPFA判 阅读全文
posted @ 2021-04-04 22:52 jrltx 阅读(56) 评论(0) 推荐(0)
摘要:题目链接 Floyed动态加点, 每加一个点,求经过这个点的最小环,取min即可 注意inf相加溢出 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 typedef double db; 5 con 阅读全文
posted @ 2021-04-04 12:32 jrltx 阅读(79) 评论(0) 推荐(0)
摘要:题目链接 题意:求无向图最小环(n<=8000,m<=4000) 动态把边加进去跑Dij,在加入一条边(u,v,c)之前,先求出mindis(u,v),更新答案ans=min(ans,mindis(u,v)+c),复杂度$O(m^2logn)$ 1 #include<bits/stdc++.h> 2 阅读全文
posted @ 2021-04-04 11:07 jrltx 阅读(126) 评论(0) 推荐(0)
摘要:题意:找出能被d整除且数位和为s的最小值。(d<=500,s<=5000) 设状态(S,M)表示数位和为S,对d取模为M的数,则题目等价于求从(0,0)转移到(s,0)的最小字典序最短路。 因为每个结点所连的所有边权都是唯一的,所以直接从起点bfs即可。(如果边权不唯一,需要把边权相同的作为整体处理 阅读全文
posted @ 2020-03-15 15:06 jrltx 阅读(212) 评论(0) 推荐(0)
摘要:题意:无向图,边带权,问从1到n最少经过的结点数量,以及在此基础上经过的边权字典序最小的路径。 以1为源点bfs,每次把边权按从小到大的顺序进行遍历,边权相等的后继结点需要作为一个整体进行后续的bfs,这样能保证每个结点第一次被访问时的路径都是字典序最小的最短路径。 1 #include<bits/ 阅读全文
posted @ 2020-03-15 14:52 jrltx 阅读(515) 评论(0) 推荐(0)
摘要:题意是有一张无向连通图,边带权,每走过一条边需要消耗一定的电量。有k个关键点可以充满电,问从一个关键点走到另一个关键点,需要的电池容量至少是多少。 首先可以分析一下极端情况: 1.k=2:问题转化成求两点间最短路 2.k=n:问题转化成求最小生成树 所以要把两者综合起来考虑。 首先对所有关键点求一个 阅读全文
posted @ 2020-03-05 10:46 jrltx 阅读(403) 评论(0) 推荐(0)
摘要:题意:给出一张有向图,每条边有长度,对于每条边,你要回答将该边的方向取反后,从起点到终点的最短距离是增加or减小or不变。 首先求出起点到所有点的最短距离和所有点到终点的最短距离(两次DIjkstra,第二次跑反向边即可),并建出最短路图。设ds[u]为起点到点u的最短距离,dt[u]为点u到终点的 阅读全文
posted @ 2019-10-17 19:49 jrltx 阅读(267) 评论(0) 推荐(0)
摘要:题意:给定一个n个点m条边的无向图,边权分别为1-m,从起点1出发,每经过一条边就把边权以字符串的形式加入末尾,求到达其他每个点的最小字符串(长度不同的短的更小,否则字典序小的更小)。 思路很巧妙,将每个边按照边权的位数拆成若干条虚边+若干个虚点,然后以1为起点进行BFS,边权相同的放在一起处理,这 阅读全文
posted @ 2019-10-04 19:51 jrltx 阅读(179) 评论(0) 推荐(0)
摘要:题目链接 双端队列跑边,颜色相同的边之间的花费为0,放进队首;不同的花费为1,放进队尾。 用Dijkstra+常数优化也能过 阅读全文
posted @ 2019-08-02 10:50 jrltx 阅读(133) 评论(0) 推荐(0)