【BZOJ4016】最短路径树问题,最短路+点分治
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】最短路径树问题,最短路+点分治相关推荐
- Bzoj4016/洛谷P2993 [FJOI2014] 最短路径树问题(最短路径问题+长链剖分/点分治)
题面 Bzoj 洛谷 题解 首先把最短路径树建出来(用\(Dijkstra\),没试过\(SPFA\)\(\leftarrow\)它死了),然后问题就变成了一个关于深度的问题,可以用长链剖分做,所以我 ...
- 点分治问题 ----------- P2993 [FJOI2014]最短路径树问题 [最短路径树+点分治+采坑]
题目链接 解题思路: 首先我们知道最小路径树实际上就是Dijkstra算法在找最短路的时候转移的过程就是一个最短路径树. 那么我们就可以先跑个最短路,记录一下各个最短路的路径.然后就是很裸的点分治.分 ...
- CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想
题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...
- [K短路 可持久化堆 最短路径树] JDFZ 2978 第k短路(强)
链接:https://oj.jdfz.com.cn/oldoj/problem.php?id=2978 鼎爷的[课件]堆的可持久化和k短路 其中每条边的新权值可以形象的理解为走这条边要多花的代价 然后 ...
- bzoj 4016: [FJOI2014]最短路径树问题
Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最 ...
- HDU 5385 The path(贪心、构造、最短路径树)
HDU 5385 题目大意:给定一个图,dis表示第i个点到1点的最短路,dis1=0,给有向图上的边赋权值(1~n)满足dis1<dis2<dis3<--<disk>d ...
- POJ3013 Big Christmas Tree(最短路径树)
题目大概说给一张点和边都有权的图,现在要求其一棵以1结点为根的生成树使树的边权和最小,树边权 = 对应的图边权 * 树边末端点为根的子树所有结点对于图顶点的点权和. 要求∑(边权*子树点权和),等价于 ...
- 最小生成树、最短路径树
一.最小生成树与最短路径树的区别 最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径. 应用如网络部线,把所有的电脑(服务器?)都连起来用的网线(光纤?)最少,即用最小的 ...
- 【最短路径树】 [USACO09JAN]Safe Travel G
题目链接 CSDN 最近 LaTeX\LaTeXLATEX 渲染的真的好丑啊,看不下去了,最近只在 CSDN 上发一点公式不那么多的题解了,式子多的我得等 CSDN 这玩意好了再交吧,目前是有一道四 ...
- 最短路径树(SPT)介绍及matlab代码
文章目录 前言 一.最短路径树是什么? 二.最短路径树的算法 1.Dijkstra算法(我比较常用和喜欢的算法) 2.Floyd算法 总结 前言 最短路径树是路由算法设计中常用到的一种树,往往我们 ...
最新文章
- Core Graphics
- cmd启动tomcat
- if submission is included through the excel
- .Net Core下如何管理配置文件(转载)
- windows删除「WIN+R」的历史记录
- 弹出打开蓝牙_iOS13隐藏特性 双蓝牙音频共享功能详解
- 一文足矣:Unity行为树
- win10 u盘 修复计算机,U盘启动盘修复win10系统的方法
- 花前病酒的学拳笔记,杨氏叶派,叶家拳,暂时1-19
- SHT10温湿度传感器
- Unity3D Editor 编辑器扩展3 Editor脚本
- java计算机毕业设计高铁在线购票系统MyBatis+系统+LW文档+源码+调试部署
- 如何设置一个按钮 左边方形右边圆形
- 写一段有趣的科普文来介绍鲫鱼
- 一分钟了解Mysql的间隙锁——《深究Mysql锁》
- Spark数据分区(partitionBy分区、partitioner获取分区方式、自定义分区)
- 计算机电源插座安装,电源安装图解
- html如何用ajax连杰和苏局哭,ajax的探究与使用
- 用gcc编译器运行c语言程序
- 安卓修改软件安装时间_Linux软件包分类
热门文章
- 【鲲鹏来了】华为云鲲鹏弹性云服务器 KC1一文全掌握(4)
- 华为方舟编译器开源官网正式上线
- Zabbix的应用(6)----常见错误
- 用户登录python_python用户登录系统
- c++qq主界面_QQ小程序,一个被严重低估的超级流量池!错过你就亏大了
- 小程序点击显示隐藏(点击标题,内容显示,再次点击隐藏,同时切换箭头的状态,且默认第一组的内容显示)
- 常见的网站布局方式---左固定右自适应、左右固定中自适应等
- Pandas dataframe列名重命名
- python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
- 计算机网络实训简介,计算机网络实验报告介绍.doc