点这里看题目
根据题意和测试用例知道这是一个求次短路径的题目。次短路径,就是比最短路径长那么一丢丢的路径,而题中又是要求从一点到指定点的次短路径,果断Dijkstra。
R (1 ≤ R ≤ 100,000,N (1 ≤ N ≤ 5000) ,length D (1 ≤ D ≤ 5000),所以我用链式向前星方法存储,这个不知道的(我转载别人的,讲的挺详细)。
用一个二维数组dist[MAXN][2],去记录i->j的最短路径和次短路径,第二维是0表示当期拿记录最短边,是1表示当前记录次短边。思路是这样,dist初始值为INF,当if(!vis[j][0] && dis[j][0] < MIN),即找到最短边,标记下来;如果 else if(!vis[j][1] && dis[j][1] < MIN),则是次短边,标记下来。所后进行松弛操作。。。。
1 /*************************************************************************
2 > File Name: poj3255.cpp
3 > Author: YeGuoSheng
4 > Description:
5 给定n个点和需要到达的点编号
6 问从1号点到目标点的次短路径
7 > Created Time: 2019年07月21日 星期日 16时40分46秒
8 ************************************************************************/
9
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include