博客
关于我
【图论】【最短路】工厂的烦恼
阅读量: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/

    你可能感兴趣的文章
    PHP改变数组key值的方法
    查看>>
    php教程之php空白页的原因及解决方法
    查看>>
    PHP数据库操作
    查看>>
    PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
    查看>>
    RabbitMQ - 死信、TTL原理、延迟队列安装和配置
    查看>>
    PHP数据访问的多重查询(租房子查询)
    查看>>
    RabbitMQ - 如保证消息的可靠性?(消息确认、消息持久化、失败重试机制)
    查看>>
    RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
    查看>>
    php数组函数分析--array_column
    查看>>
    php数组去重复数据的小例子
    查看>>
    php数组实现:哈希 +双向链表
    查看>>
    PHP数组排序函数array_multisort()函数详解(二)
    查看>>
    php数组的几个函数和超全局变量
    查看>>
    PHP文件上传详解
    查看>>
    PHP文件锁
    查看>>
    php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
    查看>>
    PHP时间戳和日期相互转换操作总结
    查看>>
    php时间戳知识点,php 时间戳函数总结与示例
    查看>>
    php更新数据库失败,php – 无法更新MySQL数据库
    查看>>
    php机器人聊天对话框,基于AIML的PHP聊天机器人
    查看>>