博客
关于我
HDU - 4109 Instrction Arrangement
阅读量:582 次
发布时间:2019-03-11

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

为了解决这个问题,我们需要重新排列指令以确保它们之间的间隔不小于安全距离,从而避免潜在的错误。我们将使用拓扑排序来确定指令的执行顺序,并计算每个指令的最早开始时间(EET),以确保所有依赖关系和安全距离都得到满足。

方法思路

  • 构建依赖图:读取输入数据,构建一个有向无环图(DAG),其中每个节点表示一个指令,边表示依赖关系。
  • 拓扑排序:使用队列来进行拓扑排序,确定指令的执行顺序。初始化队列中包含入度为0的指令。
  • 计算最早开始时间(EET):对于每个指令,计算它的最早开始时间,确保与其前驱指令的时间差不小于安全距离。处理每个指令的依赖关系,更新目标指令的EET。
  • 确定最小时间:所有指令的EET中的最大值即为完成所有指令所需的最小时间。
  • 解决代码

    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    G = [[] for _ in range(N)]    indegree = [0] * N    EET = [0] * N    for _ in range(M):        X = int(input[ptr])        ptr += 1        Y = int(input[ptr])        ptr += 1        Z = int(input[ptr])        ptr += 1        G[X].append((Y, Z))        indegree[Y] += 1    queue = deque()    for i in range(N):        if indegree[i] == 0:            queue.append(i)    while queue:        u = queue.popleft()        for (v, z) in G[u]:            if EET[u] + z > EET[v]:                if EET[v] == 0:                    EET[v] = EET[u] + z                    indegree[v] -= 1                    if indegree[v] == 0:                        queue.append(v)                else:                    EET[v] = max(EET[v], EET[u] + z)                    if EET[v] > EET[u] + z:                        pass    print(max(EET))if __name__ == "__main__":    main()

    代码解释

  • 读取输入:读取输入数据,解析指令数量、依赖关系数量和每条依赖关系。
  • 构建依赖图:使用邻接表存储依赖关系,每个节点记录其目标节点和安全距离。同时,记录每个节点的入度。
  • 拓扑排序:使用队列处理每个节点,确定其EET。对于每个节点,处理其所有依赖关系,更新目标节点的EET。
  • 计算最小时间:遍历所有指令的EET,找出最大值,即为完成所有指令所需的最小时间。
  • 通过这种方法,我们能够高效地重新排列指令,确保所有依赖关系和安全距离都得到满足,从而在最短的时间内完成所有指令的执行。

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

    你可能感兴趣的文章
    一文理解设计模式--命令模式(Command)
    查看>>
    VTK:可视化之RandomProbe
    查看>>
    block多队列分析 - 2. block多队列的初始化
    查看>>
    Java时间
    查看>>
    不编译只打包system或者vendor image命令
    查看>>
    The wxWindows Library Licence (WXwindows)
    查看>>
    leetcode——第203题——虚拟头结点
    查看>>
    【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
    查看>>
    MySQL----基础及常用命令
    查看>>
    flink启动(二)
    查看>>
    前端开发进阶手册.pdf
    查看>>
    软件架构设计和MESH经验之谈
    查看>>
    关于宝塔面板安装的mysql用Navicat连接出现2003的错误解决
    查看>>
    Windows2016 FTP用户隔离
    查看>>
    js传入参数是中文的时候出现 “******”未定义错误
    查看>>
    吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
    查看>>
    pair的用法
    查看>>
    SQL基本操作命令
    查看>>
    C# WinForm程序退出的方法
    查看>>
    onFailure unexpected end of stream
    查看>>