博客
关于我
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/

    你可能感兴趣的文章
    spring的值注入与组件扫描
    查看>>
    C#跨窗体程序调用方法的具体操作
    查看>>
    C#中创建Android项目
    查看>>
    统计学之变异系数与是非标志
    查看>>
    关于继承的一些基本知识
    查看>>
    抖音发布黄金时间段,抖音上热门最佳时间
    查看>>
    我的图床~
    查看>>
    Thymeleaf sec:authorize 标签不生效
    查看>>
    Iterable与Iterator
    查看>>
    Python机器学习(六十五)Matplotlib 入门
    查看>>
    关于WebView当前地址问题的疑惑
    查看>>
    Python机器学习(九十二)Pandas 统计
    查看>>
    SecSolar:为代码“捉虫”,让你能更专心写代码
    查看>>
    Trying to construct an instance of an invalid type
    查看>>
    1965 - 2019 年最流行的编程语言变化
    查看>>
    链上钱包的博彩雷区
    查看>>
    GRUB2
    查看>>
    解决RHEL6 vncserver 启动 could not open default font 'fixed'错误.
    查看>>
    微信JS-SDK DEMO页面和示例代码
    查看>>
    Chrome查找发请求的js之黑箱调试
    查看>>