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

    你可能感兴趣的文章
    liunx上安装nodejs步骤
    查看>>
    Liunx中各种压缩包及解压命令
    查看>>
    liunx命令查看cpu使用率和负载情况
    查看>>
    liunx快速修改文件夹或文件的属性
    查看>>
    Liunx挂载nfts盘数据方法
    查看>>
    liunx查找当前目录文件及子目录文件下的中文并替换
    查看>>
    liunx环境下的mysql数据库配置文件my.conf内的参数含义
    查看>>
    liunx目录和文件管理(一)
    查看>>
    liunx系统中的文件压缩与解压
    查看>>
    liunx编写启动,kill进程脚本
    查看>>
    liux的学习笔记
    查看>>
    live555 testrtspclient客户端建立rtp over tcp 异常问题
    查看>>
    LiveBOS UploadFile.do 任意文件上传漏洞复现(XVE-2023-21708)
    查看>>
    LiveData Call Adapter for Retrofit 使用教程
    查看>>
    LiveData的分析与简单使用
    查看>>
    LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
    查看>>
    live和on的区别
    查看>>
    Liya Linux:Arch 的又一尝试,提供 Cinnamon 和 MATE 桌面,底层为 Btrfs
    查看>>
    li下的ul----多级列表
    查看>>
    lk部分没有msm8937相关目录原因(指向msm8952)
    查看>>