博客
关于我
【图论】【最短路】工厂的烦恼
阅读量:314 次
发布时间:2019-03-04

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

为了解决这个问题,我们需要找到消耗原材料最多的生产线路,这可以通过求解图中的最长路径来实现。由于这是一个有向无环图(DAG),我们可以使用拓扑排序来处理每个节点,确保计算的正确性。

方法思路

  • 问题分析:我们需要找到损耗最大的生产线路,这是一个典型的最长路径问题。由于图是有向无环图,我们可以使用拓扑排序来处理每个节点。
  • 拓扑排序:使用Kahn算法进行拓扑排序,确定节点的处理顺序。
  • 动态规划:从起点开始,逐层更新每个节点的最长路径损耗。
  • 计算最大损耗:在处理完所有节点后,找出最大损耗。
  • 解决代码

    import sysfrom collections import dequedef main():    # 读取输入    input = sys.stdin.read().split()    ptr = 0    N = int(input[ptr])    ptr += 1    M = int(input[ptr])    ptr += 1    # 初始化邻接表和入度数组    in_degree = [0] * (N + 1)    adj = [[] for _ in range(N + 1)]  # 邻接表,每个节点的邻居列表存储(目标节点,损耗)    for _ in range(M):        A = int(input[ptr])        ptr += 1        B = int(input[ptr])        ptr += 1        C = int(input[ptr])        ptr += 1        adj[A].append((B, C))        in_degree[B] += 1    # 初始化max_cost数组    max_cost = [0] * (N + 1)    # 找出入度为0的节点作为起点    q = deque()    for i in range(1, N + 1):        if in_degree[i] == 0:            q.append(i)    # 拓扑排序并计算max_cost    while q:        u = q.popleft()        for (v, cost) in adj[u]:            if max_cost[v] < max_cost[u] + cost:                max_cost[v] = max_cost[u] + cost                in_degree[v] -= 1                if in_degree[v] == 0:                    q.append(v)    # 找到max_cost中的最大值    print(max(max_cost))if __name__ == "__main__":    main()

    代码解释

  • 读取输入:从标准输入读取数据,构建邻接表和入度数组。
  • 初始化变量max_cost数组记录从起点到每个节点的最大损耗,q队列用于拓扑排序。
  • 拓扑排序:使用Kahn算法处理节点,更新每个节点的最大损耗。
  • 计算最大损耗:遍历所有节点,找出max_cost中的最大值并输出。
  • 该方法确保了在处理每个节点时,所有可能影响其损耗的前驱节点已经被处理,从而保证了计算的正确性。

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

    你可能感兴趣的文章
    project打开文件时,显示无法识别此文件格式?
    查看>>
    Prometheus + Grafana on Kubernetes部署
    查看>>
    prometheus + grafana进行服务器资源监控
    查看>>
    Prometheus Alertmanager 告警配置详解
    查看>>
    Prometheus Grafana 展示平台
    查看>>
    Prometheus pushgateway使用详解
    查看>>
    Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关
    查看>>
    Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery
    查看>>
    Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用
    查看>>
    Prometheus 云原生 - 监控 Linux、MySQL、Redis、RabbitMQ、Docker、SpringBoot 3.x
    查看>>
    Prometheus 介绍
    查看>>
    Prometheus 安全配置详解
    查看>>
    prometheus 安装node_exporter, node_exporter 安装最新版 普罗米修思安装监控服务器client
    查看>>
    Prometheus 安装部署实战
    查看>>
    prometheus 持久化存储方案
    查看>>
    Prometheus 监控系统企业级实战
    查看>>
    Prometheus 监控系统简介
    查看>>
    Prometheus 配置详解
    查看>>
    Prometheus 采集器使用详解
    查看>>
    Prometheus 黑盒监控实战
    查看>>