
点分治
点分治
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
gym102452C Constructing Ranches 2019ICPC香港现场赛
https://codeforces.com/gym/102452/problem/C这种多少条满足条件的路径一眼就是点分治题,然而我半年多没写不太会了。。。还好告诉了队友后队友一个小时1A了,补一下这题复习一下点分治,不能总是依赖队友。。。首先能组成简单多边形的条件就是sum>2*mx,可以由三角形两边之和大于第3边类比过来。由于这题的边长是1e9级别的,所以我们要用用树状数组维护。我们把没有标记为true的子树拿出来,从根节点到每个点的路径长度sum和路径上的最大值mx求出来,然后把所原创 2020-09-08 22:09:18 · 528 阅读 · 0 评论 -
hdu5469 Antonidas 2015上海网络赛
http://acm.hdu.edu.cn/showproblem.php?pid=5469点分治加字符串hash先预处理出要找到的字符串的前缀和后缀的hash值,使用ull自然溢出,幂取131(之前听说字符串hash这样比较好那么我们再点分治的时候,知道从当前rt向下到每个点的深度dis[j],也知道它的hash值a[j],如果刚好和pre[dis[j]]或者suf[slen-dis...原创 2020-01-15 10:39:52 · 174 阅读 · 0 评论 -
2017 ACM-ICPC 亚洲区(西安赛区)网络赛 A Tree 树分治维护矩阵乘积
https://nanti.jisuanke.com/t/A1267艹,忘记矩阵乘法不支持交换律了,调了一年。我们把询问放到询问路径的端点上,然后在点分治的过程中,看不同子树中有没有同一条询问路径的端点,有的话就匹配成功计算出答案。由于矩阵乘法不支持交换律,所以第i条询问路径的起点u添加i,终点v添加i+q,而且在点分治dfs的过程中,要维护从rt到v的disdw[v],也要维护反向的...原创 2020-01-14 17:08:34 · 860 阅读 · 0 评论 -
CodeChef PRIMEDST Prime Distance On Tree
https://www.codechef.com/problems/PRIMEDST5e4以下的质数有5000多个,nlogn*5000直接没了,所以不能对于每一个点枚举所有质数,即使加了剪枝也不行那么我们想到要计算本身和本身相加的和 的方案数,而且本题的边长都是1,所以质数的范围也与当前分治的子树的点数有关,最大的dep为mxdep,那么寻找的质数就不用超过2*mxdep了,所以可以ff...原创 2020-01-14 09:31:37 · 202 阅读 · 0 评论 -
hdu6035 Colorful Tree 点分治
http://acm.hdu.edu.cn/showproblem.php?pid=6035对着题面思考了1小时,看题解研究了1小时代码才看懂,菜哭.jpg这题是真的妙啊,好像题解给得是O(n)的树形DP,点分治nlogn的1700ms过了。。。n再大一点就没了。对于点分治,我们需要计算经过rt点所有路径的所有贡献,反过来计算,我们需要计算每一种颜色在经过rt点的路径有多少条首先对...原创 2020-01-13 20:49:45 · 226 阅读 · 0 评论 -
poj2114 Boatherds
http://poj.org/problem?id=2114把洛谷点分治1复制过来一直WA?然后把二分改成two-pointer 过了?不知道之前的二分哪里写错了。#include<cstdio>#include<cstring>#include<algorithm>using namespace std; const int max...原创 2020-01-13 12:27:55 · 218 阅读 · 0 评论 -
hdu4812 D Tree 2013南京区域赛
http://acm.hdu.edu.cn/showproblem.php?pid=4812solv(rt)写成solv(v)了,一直超时,调了2个多小时,看到网上题解有写得跟我一毛一样的,二分抄代码找到了。。。点分治超时肯定要么在dfs上,vis[u]=true没标之类的,要么在solv(rt)上,solv错了点导致不符合点分治了。我之前写的点分治版本都是算出所有的然后再减去重复的组...原创 2020-01-13 10:45:50 · 127 阅读 · 0 评论 -
hdu5977 Garden of Eden 2016大连区域赛G题
http://acm.hdu.edu.cn/showproblem.php?pid=5977点分治,对于每个重心u计算出经过u且能构成当前需要的满状态ss的方案数。对于每条到u的路径,我们得到这条路径上有的种类的状态压缩的数字a[i]然后枚举a[i]的每个子集(可以在calc中枚举,也可以在外面枚举存在vector)) s0,sum[s0]++,说明a[i]是包含s0的,s0是a[i...原创 2020-01-12 20:29:57 · 199 阅读 · 0 评论 -
洛谷P2634 [国家集训队]聪聪可可
https://www.luogu.com.cn/problem/P2634点分治,在calc函数中统计长度为3的倍数的路径就可以了。在calc中我们算出来的是点对的数量,且没有顺序,也不能选择同一个点。所以最后我们要ans=ans*2+n,选择同一个点他们之间的路径长度是0#include<bits/stdc++.h>using namespace std;c...原创 2020-01-12 16:45:47 · 148 阅读 · 0 评论 -
洛谷P3806 点分治1
https://www.luogu.com.cn/problem/P3806时隔一年半复习一下点分治。。。。点分治模板就是nlogn的,然后内部每次要排序还要二分就是nlog^2n的复杂度。。。。812ms飘过不过看到网上一些平方求是否有K的组合也过了???显然是要先合并值相同的,再枚举一个值为x的,二分找k-x的吧。。。。#include<bits/stdc++.h&...原创 2020-01-12 15:28:33 · 314 阅读 · 0 评论 -
POJ - 1741 树的点分治
第一次接触树分治。打算今晚学的,先看了一蛤树的重心怎么求,之后知道了重心后再来看这道题,这种题是不是启发式合并也可以?一遍一遍加边地合并上去,然后枚举小的块的每个点,二分大的块,然而这还是要遍历一遍小的块再遍历一遍大的块才能预处理出道链接的两个点的距离,就不满足启发式合并的nlogn了,因为要对大的块进行遍历,燃热这个n<1e4,不是很大,说不定能水过去,然而T了。。。果然是楼教主的男人8题...原创 2018-07-05 23:32:43 · 179 阅读 · 0 评论