zoukankan      html  css  js  c++  java
  • 快乐的一天从AC开始 | 20210723 | P2934

    题目链接

    这周一开始分到了个巨难写的需求,然后一整周都在自闭。主要是跨度比较大,方案可不可行还不知道,只能说堆时间试,然后我就踩坑填坑踩坑填坑。

    一开始有个方案,分析了之后觉得不可行,直接跳过了,没想到踩了巨多坑之后,发现了一个文档,把之前那个方案改改就大概率可行了。然后昨天实验成功,有了可行的方案,从无限的自闭进入到有限的自闭当中。剩下的工作就是把实验代码改成工程代码,今天和同事讨论了一下,把大概的框架也定下来的。

    心路历程

    一眼秒了,有什么好说的

    欸,这书剖怎么老写不对啊

    思路

    首先,建出最短路树,然后可以通过非树边去绕路。

    可以证明最优的情况一定是只通过一条非树边绕路。证明的话,就分别拿通过一条和通过两条边情况去比较。

    然后,通过观察可以得出:一条非树边((u, v))可以优化的点,就是两个节点到(operatorname{LCA}(u, v))路径上的点(不包括(operatorname{LCA}(u, v)))。再往上就会有环,再往下就会通过被ban掉的边。

    节点(i)通过边((u, v))绕路之后的答案为(d_u + d_v + w(u, v) - d_i)(d_i)固定,只要最小化剩下的部分。

    然后枚举每一条非树边,然后前面部分的值是已知的,剩下就是两条树链的取最小修改,直接树剖+线段树,(O(n log^2{n}))搞定。

    其实也可以借助可并堆做到(O(nlog n)),不过懒得写了。

  • 相关阅读:
    软考过后
    最近
    软考复习初体验
    再看提高班
    C语言深入学习系列 字节对齐&内存管理
    C++ 阶段一(已完成)
    小弟,开博学习了!!
    [学习心得] 我总结的进制转换
    《深入浅出设计模式》一书学习(.net版—简单工厂)
    安装mysql 获得 mysql.h 建立C接口
  • 原文地址:https://www.cnblogs.com/zengzk/p/15054251.html
Copyright © 2011-2022 走看看