分层迪杰斯特拉,主要解决的是权重变动的最短路径。
只需要在迪杰斯特拉的代码上做轻微的改动就可以。
1.建立多层连接路径
2.求最短结果的时候,取到每一层的最短结果的最小值
本来是用来处理 P4568 [JLOI2011]飞行路线,但是实际有两个用例没法AC,先把4822AC了
package info.frady.luogu;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class P4822 {
public static Node4822[] nodes;
public static void main(String[] args) throws Exception{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(reader.readLine());
int N=Integer.parseInt(st.nextToken());//城市数量
int M=Integer.parseInt(st.nextToken());//航线数量
int K=Integer.parseInt(st.nextToken());//免费乘坐次数
/*st=new StringTokenizer(reader.readLine());
int s=Integer.parseInt(st.nextToken());//起点城市

本文介绍了如何使用分层迪杰斯特拉算法处理权重变动的最短路径问题。该算法在原有迪杰斯特拉算法的基础上进行改进,通过建立多层连接路径,并在每层中选取最短结果的最小值来求解。文章以P4822 [BJWC2012]冻结问题为例,虽然在P4568 [JLOI2011]飞行路线中有两个用例未能通过,但已成功应用于P4822题目。
最低0.47元/天 解锁文章
783

被折叠的 条评论
为什么被折叠?



