zoukankan      html  css  js  c++  java
  • [WC2014]紫荆花之恋

    PS:这篇博客我是从2019年12月29日开始写的

    Task1 N<=1000

    (O(n^2))算法随便乱搞。

    源代码

    Task2 N<= 1e5 且为链

    考虑新加入一个节点后,因为是链,所以每个节点到新加入的节点的距离的增量是相同的。

    观察一下两个小精灵能够成为好朋友的条件:

    [dist(i,j)le r_i + r_j ]

    移个项:

    [dist(i,j) - r_j le r_j ]

    于是可以用平衡树维护每个点的(dist(i,j)-r_j),然后直接查询即可。

    算法复杂度(O(Nlog N))

    源代码

    Task3 N<= 1e5

    (r le 10),这意味着什么?这意味着新加入一个节点之后,最多只需要搜索到深度为20就够了,但是(1s)后我就发现了问题,这不是直接就被菊花图卡成(n)方了吗?

    让我们再次考虑一下上面的柿子

    [dist(i,j)le r_i + r_j ]

    (dis_i)表示以(1)为根,从(1)到节点(i)的距离,那么:

    考虑新加入一个节点(x)后,那么只需分两种情况讨论:

    1. (x)在同一条链上的节点

      (dis_x - dis_ile r_x + r_i)

      (dis_x - r_x le r_i + dis_i)

    2. (x)不在同一条链上的节点

      (dis_x + dis_ile r_x + r_i)

      (dis_x - r_x le r_i - dis_i)

    现在的问题就在于怎么处理是否与(x)在同一条链上的情况。每条链建一棵平衡树。

    这就触及到我的知识盲区了。

    但是我(jio)得暴力搞的话,可以过掉一些随机生成树的点。

    好的,到这里,预计得分是(50pts)上下。

    但是这个部分分我不想写了。。。

    正解

    Update 2020.1.1 一年后(大雾,辣鸡的(lyx)终于开始写这道题的正解了

    请移步传送门

    既然选择了远方,便只顾风雨兼程。
  • 相关阅读:
    使用node 创建一个新项目
    安装node 及相关配置
    Java面试查漏补缺
    科学计算软件——Octave安装
    Wine——在Linux上运行Windows软件
    windows和linux中搭建python集成开发环境IDE——如何设置多个python环境
    Ubuntu安装Gnome3
    ubuntu自定义分辨率
    Ubuntu添加开机自动启动程序方法
    sublime Text3及其插件的使用
  • 原文地址:https://www.cnblogs.com/newbielyx/p/12129810.html
Copyright © 2011-2022 走看看