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

    你可能感兴趣的文章
    Quartz进一步学习与使用
    查看>>
    Plotly条形图-根据正/负值更改颜色-python
    查看>>
    PLSQL developer12安装图解
    查看>>
    PLSQL Developer调试 存储过程和触发器
    查看>>
    PLSQL window操作
    查看>>
    plsql 存储过程 测试
    查看>>
    plsql 安装后database下拉没有东西
    查看>>
    PLSQL_Oracle PLSQL内置函数大全(概念)
    查看>>
    PLSQL_案例优化系列_体验逻辑结构如何影响SQL优化(案例3)
    查看>>
    PLSQL中INDEX BY TABLE的 DELETE操作
    查看>>
    plsql学习笔记---plsql相关概念,以及基础结构
    查看>>
    plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
    查看>>
    plsql查询乱码问题解决
    查看>>
    PLSQL的DBMS_GETLINE
    查看>>
    quartz简单demo,教你最快使用quartz
    查看>>
    PlutoSDR学习笔记(一)—函数API手册
    查看>>
    Quartz安装包中的15个example
    查看>>
    Quartz学习总结(2)——定时任务框架Quartz详解
    查看>>
    pm2 start命令中的json格式详解
    查看>>
    pm2启动报错
    查看>>