Time:2016.08.21
Author:xiaoyimi
转载注明出处谢谢


注意:代码中递归子树时对子树大小的计算有误,虽然可以保证正确性但是会使得求得的子树重心并不正确,可能会被卡掉

传送门
思路:
蛋疼了好久
最后还是卡线过的,成功垫底(小号跑5500ms,大号6008ms)
第一问比较好搞,spfa最短路基础上记录每个点的前驱边(这是错的,见UPD),就像费用流一样,然后重新建边就行了
第二问考虑点分治
对于每次分治部分的重心root,考虑将root作为路径上的中转点,记录数组f[x]表示之前找到的root各子树中深度为x的路径的最大值(即这条路径上有x个点)
g[x]表示当前所搜索的子树中深度为x的路径的最大值
所以查询max(f[x]+g[k-x-1])就可以了,因为还要经过root所以要减1
复杂度,我不会分析……(这也是我对点分治难以突破的瓶颈啊啊)

UPD
2018.10.13
感谢博友为我指出错误,当时我错误地理解了字典序的含义,真正的做法不应该是比较前驱节点的大小,而是对每个点的所有连边按另一端点的编号大小排序,然后用spfa/堆优化dij跑一遍最短路后,对整张图进行dfs,在dfs过程中只走符合最短路的边(dis[v]==dis[u]+w(u,v)),因为之前已经排过序了,所以走的过程中一定是按编号从小到大走的,每个点只会被遍历一次,这样记录下dfs过程中走过的边,这些边就是树边了。
关于连边排序的问题,用vector的朋友很容易做到,至于用数组模拟邻接表的朋友,我个人觉得可以对读入数据(u,v,w)进行排序(之前要先保证统一u<v或u>v),然后依次加边,也可以做到端点编号从小到大的dfs。
经过测试发现luogu和BZOJ上的数据都不会使之前那种错误方法WA(BZOJ上的新数据会使它TLE,但我把数据下载本机测试是可以AC的)。
最近比较忙,可能没时间改代码,如果大家想要对拍std什么的,可以去别的博客看看,因为写这道题的人还是挺多的,我的代码又长又常数大,就算了吧

【BZOJ4016】最短路径树问题,最短路+点分治相关推荐

  1. Bzoj4016/洛谷P2993 [FJOI2014] 最短路径树问题(最短路径问题+长链剖分/点分治)

    题面 Bzoj 洛谷 题解 首先把最短路径树建出来(用\(Dijkstra\),没试过\(SPFA\)\(\leftarrow\)它死了),然后问题就变成了一个关于深度的问题,可以用长链剖分做,所以我 ...

  2. 点分治问题 ----------- P2993 [FJOI2014]最短路径树问题 [最短路径树+点分治+采坑]

    题目链接 解题思路: 首先我们知道最小路径树实际上就是Dijkstra算法在找最短路的时候转移的过程就是一个最短路径树. 那么我们就可以先跑个最短路,记录一下各个最短路的路径.然后就是很裸的点分治.分 ...

  3. CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想

    题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...

  4. [K短路 可持久化堆 最短路径树] JDFZ 2978 第k短路(强)

    链接:https://oj.jdfz.com.cn/oldoj/problem.php?id=2978 鼎爷的[课件]堆的可持久化和k短路 其中每条边的新权值可以形象的理解为走这条边要多花的代价 然后 ...

  5. bzoj 4016: [FJOI2014]最短路径树问题

    Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最 ...

  6. HDU 5385 The path(贪心、构造、最短路径树)

    HDU 5385 题目大意:给定一个图,dis表示第i个点到1点的最短路,dis1=0,给有向图上的边赋权值(1~n)满足dis1<dis2<dis3<--<disk>d ...

  7. POJ3013 Big Christmas Tree(最短路径树)

    题目大概说给一张点和边都有权的图,现在要求其一棵以1结点为根的生成树使树的边权和最小,树边权 = 对应的图边权 * 树边末端点为根的子树所有结点对于图顶点的点权和. 要求∑(边权*子树点权和),等价于 ...

  8. 最小生成树、最短路径树

    一.最小生成树与最短路径树的区别 最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径. 应用如网络部线,把所有的电脑(服务器?)都连起来用的网线(光纤?)最少,即用最小的 ...

  9. 【最短路径树】 [USACO09JAN]Safe Travel G

    题目链接 CSDN 最近 LaTeX\LaTeXLATE​X 渲染的真的好丑啊,看不下去了,最近只在 CSDN 上发一点公式不那么多的题解了,式子多的我得等 CSDN 这玩意好了再交吧,目前是有一道四 ...

  10. 最短路径树(SPT)介绍及matlab代码

    文章目录 前言 一.最短路径树是什么? 二.最短路径树的算法 1.Dijkstra算法(我比较常用和喜欢的算法) 2.Floyd算法 总结 前言   最短路径树是路由算法设计中常用到的一种树,往往我们 ...

最新文章

  1. Core Graphics
  2. cmd启动tomcat
  3. if submission is included through the excel
  4. .Net Core下如何管理配置文件(转载)
  5. windows删除「WIN+R」的历史记录
  6. 弹出打开蓝牙_iOS13隐藏特性 双蓝牙音频共享功能详解
  7. 一文足矣:Unity行为树
  8. win10 u盘 修复计算机,U盘启动盘修复win10系统的方法
  9. 花前病酒的学拳笔记,杨氏叶派,叶家拳,暂时1-19
  10. SHT10温湿度传感器
  11. Unity3D Editor 编辑器扩展3 Editor脚本
  12. java计算机毕业设计高铁在线购票系统MyBatis+系统+LW文档+源码+调试部署
  13. 如何设置一个按钮 左边方形右边圆形
  14. 写一段有趣的科普文来介绍鲫鱼
  15. 一分钟了解Mysql的间隙锁——《深究Mysql锁》
  16. Spark数据分区(partitionBy分区、partitioner获取分区方式、自定义分区)
  17. 计算机电源插座安装,电源安装图解
  18. html如何用ajax连杰和苏局哭,ajax的探究与使用
  19. 用gcc编译器运行c语言程序
  20. 安卓修改软件安装时间_Linux软件包分类

热门文章

  1. 【鲲鹏来了】华为云鲲鹏弹性云服务器 KC1一文全掌握(4)
  2. 华为方舟编译器开源官网正式上线
  3. Zabbix的应用(6)----常见错误
  4. 用户登录python_python用户登录系统
  5. c++qq主界面_QQ小程序,一个被严重低估的超级流量池!错过你就亏大了
  6. 小程序点击显示隐藏(点击标题,内容显示,再次点击隐藏,同时切换箭头的状态,且默认第一组的内容显示)
  7. 常见的网站布局方式---左固定右自适应、左右固定中自适应等
  8. Pandas dataframe列名重命名
  9. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
  10. 计算机网络实训简介,计算机网络实验报告介绍.doc