CSU1808 地铁

该博客介绍了一种解决地铁线路中求解1到n最短时间问题的思路,涉及最短路径算法与线路转换成本。通过将地铁站按线路拆分为多个节点,并构建包含线路转换费用的图,然后运行最短路径算法,最后选取所有起点拆点中的最小花费作为答案。
摘要由CSDN通过智能技术生成

题目

题意 :
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; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值