博客
关于我
魔方俱乐部
阅读量:315 次
发布时间:2019-03-03

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

为了解决这个问题,我们需要找到每个分部从虫洞出发,通过虫洞遍历其他分部,使得访问的分部的或zFang价值之和最大的情况。每个分部只能通过虫洞通向一个特定的分部,这使得我们可以将问题分解为处理多个环和链结构。

方法思路

  • 问题分析:每个分部只能有一个出边,因此整个结构由多个环和链组成。环中的每个节点都可以访问整个环,而链结构则需要从终点逆向处理。
  • 递归DFS:使用深度优先搜索(DFS)来遍历每个节点,记录路径以检测环。对于环中的节点,计算环的总价值,并将每个节点的ans值设为这个总价值。对于链结构,从终点逆向处理。
  • 环处理:当在DFS中发现环时,计算环的总价值,并将环中的所有节点的ans值设为这个总价值。
  • 链处理:对于链结构,从终点开始逆向处理,计算每个节点的ans值。
  • 解决代码

    def main():
    import sys
    sys.setrecursionlimit(1 << 25)
    n = int(sys.stdin.readline())
    orz = list(map(int, sys.stdin.readline().split()))
    F = list(map(int, sys.stdin.readline().split()))
    F = [0] + F # 1-based indexing
    visited = [False] * (n + 1)
    ans = [0] * (n + 1)
    for i in range(1, n + 1):
    if not visited[i]:
    stack = []
    current = i
    while True:
    if visited[current]:
    if current in stack:
    idx = stack.index(current)
    cycle = stack[idx:]
    sum_orz = sum(orz[node - 1] for node in cycle)
    for node in cycle:
    ans[node] = sum_orz
    for node in stack[:idx]:
    if F[node] == node:
    ans[node] = orz[node - 1]
    else:
    ans[node] = orz[node - 1] + ans[F[node]]
    break
    else:
    break
    visited[current] = True
    stack.append(current)
    current = F[current]
    if current in stack:
    idx = stack.index(current)
    cycle = stack[idx:]
    sum_orz = sum(orz[node - 1] for node in cycle)
    for node in cycle:
    ans[node] = sum_orz
    for node in stack[:idx]:
    if F[node] == node:
    ans[node] = orz[node - 1]
    else:
    ans[node] = orz[node - 1] + ans[F[node]]
    break
    for i in range(1, n + 1):
    print(ans[i])
    if __name__ == "__main__":
    main()

    代码解释

  • 输入处理:读取输入数据,初始化或zFang价值数组和虫洞指向数组。
  • 初始化数组visited数组记录每个节点是否被访问过,ans数组记录每个节点的最大价值之和。
  • 遍历每个节点:对于每个未被访问的节点,使用非递归DFS遍历。
  • 检测环:在DFS过程中,检查是否形成环。如果形成环,计算环的总价值,并将环中的节点的ans值设为这个总价值。
  • 处理链结构:对于链结构,从终点开始逆向处理,计算每个节点的ans值。
  • 输出结果:输出每个节点的最大价值之和。
  • 这种方法确保了每个节点的ans值被正确计算,处理了环和链结构,保证了算法的高效性和正确性。

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

    你可能感兴趣的文章
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOI-1.3-11-计算浮点数相除的余数
    查看>>
    noi.ac #36 模拟
    查看>>
    NOI2010 海拔(平面图最大流)
    查看>>
    NOIp2005 过河
    查看>>
    NOIP2011T1 数字反转
    查看>>
    NOIP2014 提高组 Day2——寻找道路
    查看>>
    noip借教室 题解
    查看>>
    NOIP模拟测试19
    查看>>
    NOIp模拟赛二十九
    查看>>
    Vue3+element plus+sortablejs实现table列表拖拽
    查看>>
    Nokia5233手机和我装的几个symbian V5手机软件
    查看>>
    non linear processor
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>