博客
关于我
hdu6201 transaction transaction transaction(新建源汇点,带负权最长路)
阅读量:250 次
发布时间:2019-03-01

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

为了解决这个问题,我们需要找到树中的两个不同的点S和T,使得表达式a(T) - a(S) - dist(S, T)的值最大化。树的结构和权值特性使得这个问题可以通过构建有向图来解决。

方法思路

  • 构建有向图:创建一个源点0和一个汇点n+1。将每个节点i连接到源点0,边权为 -a(i),并将每个节点i连接到汇点n+1,边权为a(i)。同时,将原树结构中的每条边转换为两条有向边,权重为负数。
  • 计算最短路径:使用SPFA算法计算源点0到汇点n+1的最短路径。这个路径的总长度即为目标函数的最大值。
  • 解决代码

    import sys
    from collections import deque
    def main():
    sys.setrecursionlimit(1 << 25)
    n = int(sys.stdin.readline())
    a = [0] * (n + 2)
    for i in range(1, n+1):
    a[i] = int(sys.stdin.readline())
    maxm = 1e5 + 5
    head = [0] * (maxm + 2)
    nt = [0] * (maxm + 2)
    to = [0] * (maxm + 2)
    w = [0] * (maxm + 2)
    tot = 0
    def add(x, y, z):
    nonlocal tot
    tot += 1
    head[x] = tot
    nt[tot] = y
    to[tot] = y
    w[tot] = z
    def spfa(start):
    q = deque()
    q.append(start)
    d = [-float('inf')] * (maxm + 2)
    d[start] = 0
    in_queue = [False] * (maxm + 2)
    in_queue[start] = True
    while q:
    u = q.popleft()
    in_queue[u] = False
    for i in range(head[u], -1, -1):
    v = to[i]
    if d[v] > d[u] + w[i]:
    d[v] = d[u] + w[i]
    if not in_queue[v]:
    q.append(v)
    in_queue[v] = True
    return d
    add(0, 0, 0)
    for i in range(1, n+1):
    add(0, i, -a[i])
    add(n+1, n+1, 0)
    for i in range(1, n+1):
    add(i, n+1, a[i])
    for i in range(1, n+1):
    u = nt[i]
    v = to[i]
    if u != -1 and v != -1:
    add(u, v, -1)
    add(v, u, -1)
    d = spfa(0)
    print(d[n+1])
    if __name__ == '__main__':
    main()

    代码解释

  • 读取输入:读取节点数n和每个节点的权值a(i)。
  • 构建有向图:将每个节点连接到源点0和汇点n+1,并处理原树结构中的每条边。
  • SPFA算法:计算源点0到汇点n+1的最短路径,更新每个节点的最短距离。
  • 输出结果:输出源点0到汇点n+1的最短路径长度,即目标函数的最大值。
  • 通过这种方法,我们能够高效地解决问题,适用于大规模数据。

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

    你可能感兴趣的文章
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>