随笔分类 - { 图论 { 最短路算法 } }
摘要:由于这整个状态不是DAG,用SPFA去转移。。其实这相当于二维最短路吧。。
阅读全文
摘要:题目大概说,一辆带有一个容量有限的油箱的车子在一张图上行驶,每行驶一单位长度消耗一单位油,图上的每个点都可以加油,不过都有各自的单位费用,问从起点驾驶到终点的最少花费是多少? 这题自然想到图上DP,通过最短路来转移方程: dp[u][c]表示当前在u点油箱还有c单位油时的最少花费 不过,我T得好惨,
阅读全文
摘要:题目大概要先求一张边有权的图的根为1的最短路径树,要满足根到各点路径序列的字典序最小;然后求这棵最短路径树包含k个结点的最长路径的长度和个数。 首先先构造出这棵字典序最小的最短路径树。。好吧,我太傻逼了,不会。。保证邻接表存储邻接点有序的前提下,就能按字典序DFS一遍,在O(N+E)的时间复杂度上构
阅读全文
摘要:题目大概说给一张点和边都有权的图,现在要求其一棵以1结点为根的生成树使树的边权和最小,树边权 = 对应的图边权 * 树边末端点为根的子树所有结点对于图顶点的点权和。 要求∑(边权*子树点权和),等价于求∑(点权*点到根路径上的边权和)。 而如果在图中各个点到根都存在最短路,那么最短路的边一定能构造出
阅读全文
摘要:。。和HDU3870类似。。注意n=1和m=1的情况。
阅读全文
摘要:题目大概说给一个n×n的方格,边有权值,问从求(1,1)到(n,n)的最小割。 点达到了160000个,直接最大流不好。这题的图是平面图,求最小割可以转化成求其对偶图的最短路,来更高效地求解: 首先源点汇点间新加一条边,然后构造其对偶图: 面作为对偶图的点;而源点到汇点之间新加的边划分出来的两个面分
阅读全文
摘要:题目大概是,普通骨牌连接两张关键骨牌,一旦一张关键骨牌倒下与其相邻的普通骨牌也倒下,普通骨牌倒下与其相邻的骨牌也倒下。给出所有有普通骨牌相连的两个关键骨牌之间普通骨牌倒下所需时间,问1号关键骨牌开始倒下后最后一张骨牌倒下的时间和位置。 居然是最短路。。记dist[u]为起点骨牌1到关键骨牌u的最短时
阅读全文
摘要:题目是要给n个重量1到n的球编号,有一些约束条件:编号A的球重量要小于编号B的重量,最后就是要输出字典序最小的从1到n各个编号的球的重量。 正向拓扑排序,取最小编号给最小编号是不行的,不举出个例子真的很难理解= =比如这个数据: 1 4 2 4 1 3 2 正确答案是2 4 3 1,会得到的错误答案
阅读全文
摘要:题目给一张有向图,问从起点1到终点2沿着合法的路走有种走法,合法的路指从u到v的路,v到终点的距离严格小于u到终点的距离。 先SPFA预处理出所有合法的路,然后这些路肯定形成一个DAG,然后DP一下就OK了,d[u]表示u到终点2的方案数。 1 #include<cstdio> 2 #include
阅读全文
摘要:题目求从某点出发回到该点经过所有边至少一次的最短行程。 这个问题我在《图论算法理论、实现及应用》中看过,是一个经典的问题——中国邮递员问题(CPP, chinese postman problem)也称为中国邮路问题,是我国数学家管梅谷教授于1962年首次提出的,引起了世界不少数学家的关注。例如19
阅读全文
摘要:d[i][j]表示从i点到j点可以全程提供光纤的公司的集合,集合用26位的二进制压缩。 那么状态转移方程就是dk[i][j]|=dk-1[i][k]&dk-1[k][j]。 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4
阅读全文
摘要:题目要求1到n点的最大容量的增广路。 听说是最短路求的,然后乱搞就A了。。 大概能从Bellman-Ford的思想,dk[u]表示从源点出发经过最多k条边到达u点的最短路,上理解正确性。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue>
阅读全文
摘要:跑完Floyd后,d[u][u]就表示从u点出发可以经过所有n个点回到u点的最短路,因此只要根据数组对角线的信息就能判断是否存在负环。 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<string> 5 #
阅读全文
摘要:边取反,从汇点跑单源最短路即可。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 1111111 7 #defin
阅读全文
摘要:利用Floyd的DP状态转移方程。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 111 7 int n,m;
阅读全文