博客
关于我
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
阅读量:791 次
发布时间:2023-02-06

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

为了解决这个问题,我们需要找到所有满足特定条件的树形结构,计算这些结构的数量,并对结果取模。具体来说,我们需要确保每个房间到第1号房间的最短路径等于实际路径长度。

方法思路

  • 最短路径树构造:首先,我们需要构造一个最短路径树,这意味着每条边都必须是所有可能的最短路径的一部分。我们可以使用SPFA算法来计算从第1号房间到其他房间的最短路径。
  • 构造有向无环图(DAG):对于每条边,我们检查它是否满足最短路径条件。如果满足,我们将其视为生成树的一部分,并记录每个房间的入度(即可能父节点的数量)。
  • 计算入度:每个房间的入度表示它可能的选择数目。最终,所有房间的入度乘积即为答案。
  • 解决代码

    import sysfrom collections import dequedef main():    MOD = 2**31 - 1    n, m = map(int, sys.stdin.readline().split())    edges = []    adj = [[] for _ in range(n + 1)]    for _ in range(m):        x, y, l = map(int, sys.stdin.readline().split())        edges.append((x, y, l))        adj[x].append((y, l))        adj[y].append((x, l))        INF = 10**18    D = [INF] * (n + 1)    D[1] = 0    visited = [False] * (n + 1)    q = deque()    q.append(1)    visited[1] = True        while q:        u = q.popleft()        for (v, l) in adj[u]:            if not visited[v]:                if D[u] + l < D[v]:                    D[v] = D[u] + l                    visited[v] = True                    q.append(v)        indegree = [0] * (n + 1)    for x, y, l in edges:        if x > y:            x, y = y, x        if D[x] + l == D[y]:            indegree[y] += 1        if D[y] + l == D[x]:            indegree[x] += 1        ans = 1    for i in range(2, n + 1):        ans = (ans * indegree[i]) % MOD        print(ans)if __name__ == "__main__":    main()

    代码解释

  • 读取输入:读取房间数和边数,然后读取每条边的信息,并构建邻接表。
  • SPFA算法:使用SPFA算法计算每个房间到第1号房间的最短路径。
  • 处理边:遍历每条边,检查它是否满足最短路径条件,并更新每个房间的入度。
  • 计算答案:将每个房间(除第1号房间外)的入度相乘,结果对MOD取模。
  • 通过这种方法,我们可以高效地解决问题,并得到正确的结果。

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

    你可能感兴趣的文章
    LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】
    查看>>
    Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
    查看>>
    lol服务器维修时间2018,《英雄联盟》维护到几点结束 2018维护公告介绍
    查看>>
    Lombok
    查看>>
    lombok @EqualsAndHashCode 注解的影响
    查看>>
    Lombok 中 @EqualsAndHashCode注解的使用
    查看>>
    lombok 的使用讲解
    查看>>
    Lombok、Hutool等开发利器
    查看>>
    Lombok中的@Builder注解的使用
    查看>>
    Lombok天天用,它的原理是什么你知道吗?
    查看>>
    LomBok常用注解及详细介绍
    查看>>
    lombok插件jar包的下载和使用
    查看>>
    lombok注解 @Data使用在继承类上时出现警告解决
    查看>>
    lombok的@Data注解在继承类上时提示警告
    查看>>
    Lombok的使用及其原理
    查看>>
    Lombok的使用及注解含义
    查看>>
    lombok的注解
    查看>>
    Long Haul:极简风格的Jekyll博客主题
    查看>>
    long mode 分页_Mybatis 在dao中获取分页的总记录数
    查看>>
    Long.valueOf 将字符串、integer类型转换为long类型
    查看>>