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

    你可能感兴趣的文章
    Oracle未开启审计情况下追踪表变更记录
    查看>>
    Oracle条件查询
    查看>>
    Oracle查看数据库会话连接
    查看>>
    Oracle查询前几条数据的方法
    查看>>
    oracle树形查询 start with connect by
    查看>>
    oracle毕业论文题目,历届毕业论文申报题目大全.doc
    查看>>
    oracle求助---win7下oracle配置相关疑问Starting Oracle Enterprise Manager 10g Database Control ...发生系统错误 5。
    查看>>
    Oracle流程控制语句
    查看>>
    oracle深度解析检查点
    查看>>
    Oracle游标
    查看>>
    oracle游标数最大数,Oracle 最大连接数 最大游标数
    查看>>
    oracle用户改名
    查看>>
    oracle用户解压不了,PLSQL developer 连接不上64位Oracle 的解决方法
    查看>>
    oracle用户解锁
    查看>>
    Oracle用游标删除重复数据
    查看>>
    Tomcat学习总结(19)—— 为什么首选Tomcat作为JavaWeb应用服务器?
    查看>>
    oracle的内置函数
    查看>>
    Oracle的存储结构
    查看>>
    Oracle的聚合函数group by结合CUBE和ROLLUP的使用
    查看>>
    Oracle监听配置、数据库实例配置等
    查看>>