博客
关于我
201609-4 交通规划 ccf
阅读量:281 次
发布时间:2019-03-01

本文共 2166 字,大约阅读时间需要 7 分钟。

G国国王想将现有的铁路改造为高速铁路,使得所有城市间可以通过高速铁路到达,并且从所有城市到首都的最短路程与原来的铁路系统一样。为了实现这一目标,我们需要找出最少需要改造的铁路长度。

首先,我们需要分析现有的铁路网络。我们可以使用Dijkstra算法来计算从首都到所有城市的最短路径距离。然后,对于每条铁路,检查它是否在这些最短路径上。如果不在,则需要改造。反之,则可以保留这条铁路。

具体来说,我们可以:

  • 计算最短路径:使用Dijkstra算法计算从首都到所有城市的最短路径距离。由于铁路是双向的,我们还需要考虑从所有城市到首都的最短路径距离。
  • 判断铁路是否在最短路径上:对于每条铁路a-b,检查是否存在从首都到a,再经过这条铁路到达b,且总长度等于从首都到b的最短距离。如果存在,则这条铁路在最短路径上,否则需要改造。
  • 统计需要改造的铁路长度:将所有不在最短路径上的铁路的长度相加,即为最少需要改造的铁路长度。
  • 样例分析

    在样例输入中,首都是1号城市。计算得到从首都到各城市的最短距离如下:

    • 1号到2号:4
    • 1号到3号:5
    • 1号到4号:7

    接下来,检查每条铁路是否在这些最短路径上:

    • 1-2(长度4)在1号到2号的最短路径上。
    • 1-3(长度5)在1号到3号的最短路径上。
    • 2-3(长度2)不在1号到3号的最短路径上,因为1-3的长度5比1-2-3的长度7更短。
    • 2-4(长度3)不在1号到4号的最短路径上,因为1-2-4的长度7比1-3-4的长度7更长。
    • 3-4(长度2)不在1号到4号的最短路径上,因为1-3-4的长度7比1-2-4的长度7更长。

    因此,需要改造的铁路有2-3(长度2)和3-4(长度2),总长度为4。

    代码实现

    import heapqdef main():    import sys    input = sys.stdin.read    data = input().split()        n = int(data[0])    m = int(data[1])        edges = [[] for _ in range(n)]    index = 2    for _ in range(m):        a = int(data[index])-1        b = int(data[index+1])-1        c = int(data[index+2])        edges[a].append((b, c))        edges[b].append((a, c))        index += 3        def dijkstra(start):        dist = [float('inf')] * n        dist[start] = 0        heap = []        heapq.heappush(heap, (0, start))        visited = [False] * n                while heap:            current_dist, u = heapq.heappop(heap)            if visited[u]:                continue            visited[u] = True            for v, w in edges[u]:                if not visited[v] and dist[v] > dist[u] + w:                    dist[v] = dist[u] + w                    heapq.heappush(heap, (dist[v], v))        return dist        dist_to_capital = dijkstra(0)    dist_from_capital = dijkstra(n-1)        total = 0        for i in range(n):        for j, c in edges[i]:            if dist_to_capital[i] + c == dist_to_capital[j] or dist_from_capital[i] + c == dist_from_capital[j]:                continue            total += c        print(total)if __name__ == "__main__":    main()

    代码解释

  • 输入处理:读取输入数据,构建铁路网络。
  • Dijkstra算法:计算从首都到所有城市的最短路径距离和从所有城市到首都的最短路径距离。
  • 判断铁路是否在最短路径上:对于每条铁路,检查它是否在最短路径上。如果不在,则将其长度加到总和中。
  • 输出结果:输出需要改造的铁路总长度。
  • 通过这种方法,我们可以高效地确定最少需要改造的铁路长度,以满足G国国王的要求。

    转载地址:http://kubx.baihongyu.com/

    你可能感兴趣的文章
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_三项内容_Spring Security OAuth2.0认证授权---springcloud工作笔记141
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_授权码模式_Spring Security OAuth2.0认证授权---springcloud工作笔记144
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2.0四种模式的详解
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    oauth2登录认证之SpringSecurity源码分析
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>