博客
关于我
【图论】【最短路】工厂的烦恼
阅读量: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 浮点型计算精度问题
    查看>>
    php 特定时间段统计,jpgraph某个时间段的数据统计
    查看>>
    php 生成csv mac下乱码
    查看>>
    php 生成证书 签名及验签
    查看>>
    php 的rsa加密与解密
    查看>>
    PHP 的标准输入与输出
    查看>>
    php 笔记 (早前的,很乱)
    查看>>
    PHP 第一天
    查看>>
    Redis使用量暴增,快速定位有哪些大key在作怪
    查看>>
    php 结课作业答案,北语201803考试批次《PHP》(结课作业)1.pdf
    查看>>
    PHP 统计数据功能 有感
    查看>>
    SpringBoot处理JSON数据
    查看>>
    Redis使用基本套路
    查看>>
    php 解决项目中多个自动加载冲突问题
    查看>>
    PHP 设置调试工具XDebug PHPStorm IDE
    查看>>
    php 身份证号检测
    查看>>
    PHP 输入输出流合集
    查看>>
    PHP 过滤器(Filter)
    查看>>
    php 运算符and or && || 的详解
    查看>>
    php 返回html字符串长度限制,记一次js中和php中的字符串长度计算截取的终极问题和完美...
    查看>>