zoukankan      html  css  js  c++  java
  • 2017 3 8 练习赛 t3 路径规划

      题目大意是让你在一棵树上找到一条路径使得(路径边权和*路径最小值) 最大。

      这道题有两种方法。

      1.点分治,考虑过重心的每条路径是否可能成为答案,枚举从根出发的每一条路径中的最小值等于总路径的最小值,那么选的另一条从根出发且不走同一棵子树的路径中的最小值必须大于等于这条路径的最小值,所以我们可以先把所有路径先找出来按最小值排个序,从大往小扫维护路径长度的最大和次大就可以直接做了。

      考试的时候想到了点分,但对点分的理解不够彻底,正常套路应该是找出所有从重心出发的路径然后合并两条路径,显然这道题是可以合并的,考试的时候总觉的要枚举一个起点找终点,最后还是写了个暴力,多好的一个AK机会。复杂度nlog^2.


      2.这道题正常想法显然应该是把边权排序从大往小加,每加进一条边就用过这条边的最长路更新答案,问题就是怎么找这个最长路。

        这个东西显然跟直径有关,我们平时找直径的时候有一种方法是dfs两遍我相信大家应该都会,那么说明我们从一个点dfs到的最远点一定是直径的一个端点,那不就好办了,对于每个联通块我们维护它直径的两个端点,那么我们合并直径只可能是原本的直径或A块里的一个端点到B块里的一个端点,分类讨论一下就好了。复杂度nlogn。

  • 相关阅读:
    Ros与Vrep平台搭建
    场景采集难点
    写给师弟师妹论文排版秘籍
    采集项目笔记2
    采集项目记录1
    NLP&Python笔记——nltk模块基础操作
    Hash算法(含python实现)
    Python学习笔记——Socket通信
    Python学习笔记——GIF倒放处理
    OSError: [WinError 126] 找不到指定的模块 —— 解决办法
  • 原文地址:https://www.cnblogs.com/ezyzy/p/6519882.html
Copyright © 2011-2022 走看看