最短路径应用题

最短路径应用题

Description

在沙漠中有N个城邦国家(编号0~N-1),每天都有商队从本国出发将本国商品运到其它各个国家,到达各个目的国家后又将该国的商品运回本国。在前往目的国家的路程中,商队可能要需要从其它国家境内穿过。每穿过一个国家商队就需要获得一张该国的通关卡,以便该商队当天沿原路返回时使用。经过多年的摸索,每支商队都已经掌握了国家间的最佳线路(距离最短的路径,不计算在国家内穿过的距离)。

为了减少商队的负担,各国之间的商队做了如下约定:每天两国之间只由一国的商队负责往返运输,即:如果当天有A国的商队从A国出发去往B国,到达B国后再返回A国,那么当天就不会有B国的商队去往A国。

特别的,在一个国家境内穿过所需持有的通关卡每天都需要提前准备(因为要标明日期)。而两个国家之间的最佳路径(距离最短的路径)可能有多条。虽然商队只会选择其中的一条,但是各条最佳路径上需要经过的国家的管理者们并不知道商队会选择哪条路径,因此他们都假设商队当天会选择自己在的这条路径,都会提前准备通关卡(虽然这些通关卡最后可能并没有用上)。

请计算各个国家每天需要提前准备多少张通关卡。

注意事项:
1. 商队沿着某条最短路径从A国去往B国时,只有沿途经过的国家才需要通关卡,起点A国和终点B国都不需要通关卡。
2. 两国间的最短路径可能有多条,根据题目假设,相当于每一条路径都需要统计。
3. 每天两国之间只会有一国的商队往返,当天A国商队去往B国的路程中会领取通关卡,但是从B国返回A国的路程中不需要再领取通关卡,因此不要重复计算。
4. 商队当天是沿原路返回。
5. 商队都足够聪明不会沿着某条路转一圈又回到了本国,也即一个顶点到自身的距离为0,不存在从自身出发并指向自身的环形路径。

示例:如下图所示的有四个国家示意图

这里写图片描述

国家0和1之间的最短路径为:0 → 1,没有经过除起点终点外的国家
国家0和2之间的最短路径为:0 → 2,没有经过除起点终点外的国家
国家0和3之间的最短路径有两条,分别为:0 → 1 → 3和0 → 2 → 3,分别经过国家1和国家2
国家1和2之间的最短路径有两条,分别为:1 → 2和1 → 0 → 2,其中第二条最短路径经过国家0
国家1和3之间的最短路径为:1 → 3,没有经过除起点终点外的国家
国家2和3之间的最短路径为:2 → 3,没有经过除起点终点外的国家

所以最终各个国家需要准备的通关卡依次为:1,1,1,0。国家0需要准备1张,因为国家1和2之间的其中一条最短路径经过它;国家1需要准备1张,因为国家0和3之间的其中一条最短路径经过它;同理,国家2需要准备1张;国家3不需要准备(0张),因为没有两个国家间的最短路径经过它。

Input Description

第一行为一个正整数N,表示国家的个数。国家的编号从0到N-1。N <= 400。

第二行为一个正整数E,表示国家间联通的道路。

接下来的E行,每行由三个整数组成(三个整数均在int型的表数范围内),前两个整数表示国家编号,第三个整数表示两国家间路径的距离,两个整数之间用一个空格分隔。如:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值