博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
点分治
阅读量:5235 次
发布时间:2019-06-14

本文共 489 字,大约阅读时间需要 1 分钟。

考虑以下问题:

给你一棵树,有边权,一条路径合法当它的边权和 \(=k\) ,求合法的路径有多少条。 \((n,k\le 2*10^5,\text{Time Limit=3s})\)

暴力 \(O(n^2)\) ,即对于每一个点dfs它的子树,把边权装桶。

考虑如何优化。
假设树是随机生成的。那么我们的暴力还是没有任何好转 。
但是这是不可能的!
所以,我们本来是选它的子节点继续统计,现在改成选它子树的重心。
于是一切都解决了。
复杂度 \(O(n\log n)\)

如果 \(k\le 10^9\)

对于每一个点dfs,记录其子树中所有点到它的距离,保存在一个 \(dis[]\) 数组里,然后sort一遍,再用two-pointers或者二分统计答案:有多少 \(dis[i]+dis[j]=k(i<j)\)
但是会有 \(i,j\) 在该点的同一棵子树内的情况,此时用容斥把它减掉。
复杂度 \(O(n\log^2 n)\)

转载于:https://www.cnblogs.com/BlogOfchc1234567890/p/10902085.html

你可能感兴趣的文章
hive报lzo Premature EOF from inputStream错误
查看>>
HDU 1232:流问题(并检查集合)
查看>>
Android动绘图标——I am not a gif maker,I am a developer
查看>>
csdn博客又開始更新了
查看>>
InstallShield12豪华版破解版下载|InstallShield下载|软件打包工具
查看>>
CentOs6系统安装mailx发邮件
查看>>
真心希望不会把这个博客荒了
查看>>
【NOIP2012普及组真题】 寻宝
查看>>
django2.2 关联表的必填on_delete参数的含义
查看>>
java循环map
查看>>
Split the Number(思维)
查看>>
linux中历史命令的一点发现
查看>>
获取多少万多少亿
查看>>
用threading和Queue模块实现多线程的端口扫描器
查看>>
团队编程项目作业5
查看>>
Java+大数+高精度
查看>>
jQuery Ajax 实例 ($.ajax、$.post、$.get)
查看>>
Spring MVC入门小例子
查看>>
ASP.NET没有魔法——ASP.NET MVC 路由的匹配与处理
查看>>
Rails 5 开发进阶
查看>>