题意 :
n个地铁站,m条线路,地铁站之间花费t时间,不属于同一条线路的地铁站需要“转站”,即加上一个额外花费w(w为线路代号的差值)。
求1到n的最短时间。
思路:
题意很清晰,就是一个最短路。与一般的不同的是多出来一个线路的概念,不同线路之间有花费。
一个站点可以属于多个线路。那么只需要将一个站点根据线路拆为多个点,通过新的点形成的图,相当于每一个点有一个flag,不同加上花费。那么通过两次加边,一次是不同站点之间的cost,一次是同一站点同一站点不同线路的拆点之间的cost。
然后直接在这个图上跑最短路就可以了
最后求n点的花费,需要遍历n的所有拆点,找到花费最小的一个,即为答案。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn =255555;
const int INF = 0x3f3f3f3f;