CF 293E Close Vertices——点分治】的更多相关文章

题目:http://codeforces.com/contest/293/problem/E 仍旧是点分治.用容斥,w的限制用排序+两个指针解决, l 的限制就用树状数组.有0的话就都+1,相对大小不变. 切勿每次memset!!!会T得不行.add(sta[ l ].len)即可,但要判一下(l==r)以防不测.(真的有那种数据!) 最后注意树状数组的范围是L(即L+1),不是n.不然可以尝试: 2 10 12 1 5 #include<iostream> #include<cstdi…
题目传送门 题意:现在有一棵树,每条边的长度都为1,然后有一个权值,求存在多少个(u,v)点对,他们的路劲长度 <= l, 总权重 <= w. 题解: 1.找到树的重心. 2.求出每个点到中心的长度和权值. 3.对所有点都询问出合法点的个数(包括同一颗子树)加到答案上. 4.对于每一棵子树内部都找到合法点的个数从答案中减去. 5.递归处理每一颗子树. 我们现在最大的问题就是怎么计算合法点的个数. 我们把点的信息记录下来之后,按照权重从小到达排序. 然后我们就可以用2个端点维护出 a[l].we…
题目链接 正解:点分治+树状数组. 点分治板子题,直接点分以后按照$w$排序,扫指针的时候把$w$合法的路径以$l$为下标加入树状数组统计就行了. 写这道题只是想看看我要写多久..事实证明我确实是老年选手了,这种傻逼题写+调竟然用了$40min$.. #include <bits/stdc++.h> #define il inline #define RG register #define ll long long #define lb(x) (x & -x) #define N (3…
题意:一棵树,边上有一个个位数字,走一条路径会得到一个数字,求有多少路径得到的数字可以整除\(P\) 路径统计一般就是点分治了 \[ a*10^{deep} + b \ \equiv \pmod P\] \[ a = (P-b)*inv(10^{deep}) \] 经过一个点的路径,统计出从根走到一个点的数字\(b\),和从点走到根的数字\(a\),然后a排序枚举b二分查找范围就行了 然后再减去同一颗子树的 这样可以避免使用平衡树 Candy?这个沙茶一开始ab搞反了 #include <ios…
题链: http://codeforces.com/contest/293/problem/E题解: 点分治,树状数组 大致思路和 POJ 1741 那道点分治入门题相同, 只是因为多了一个路径的边数限制, 所以在统计答案时, 要用数据结构维护一下在满足距离限制的情况下,有多少点也满足边数限制. 树状数组维护到当前的根(重心)的距离为x时的点的个数. 在calc函数中,记录dep[u]表示u到当前的根(重心)的边数, 然后统计u号点可以和多少点组成合法点对时,就查询树状数中有多少点满足到根的距离…
开始zz写了一个主席树,后来发现写个树状数组就行~ #include <cstdio> #include <vector> #include <algorithm> #include <bits/stdc++.h> #define N 100005 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; i…
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出一棵树,问有多少条路径权值和不大于w,长度不大于l. http://codeforces.com/contest/293/problem/E 有男人八题很相似,但是多了一个限制. 同样 还是点分治,考虑二元组(到根的路径权值和,到根的路径长度). 按第一维度排序之后,可以用two points查询权值小不大于w的,然后 用树状数组维护路径…
E. Close Vertices You've got a weighted tree, consisting of n vertices. Each edge has a non-negative weight. The length of the path between any two vertices of the tree is the number of edges in the path. The weight of the path is the total weight of…
Codeforces 293E 传送门:https://codeforces.com/contest/293/problem/E 题意: 给你一颗边权一开始为0的树,然后给你n-1次操作,每次给边加上边权,问你n-1次操作后有有多少对点之间的路径长度小于等于l,并且边权和小于等于w 题解: poj1741 点分治裸题是 边权和小于等于k,这里加了一个路径条数的限制 对于这个路径条数和边权的两个限制,我们可以得到两个不等式,可以用点分治得到满足距离的一个数组a 将数组a按照距离从小到大排序后,就可…
树链剖分可以看成是树的边分治,什么是点分治呢? CF322E - Ciel the Commander 题目:给出一棵树,对于每个节点有一个等级(A-Z,A最高),如果两个不同的节点有相同等级的父节点(节点不一定相同),则两个节点的路径上最少有一个比他们两的等级都高的节点.要求输出1~n的等级. 分析:考虑一条链的情况,如果把A放中间,把数列分成两段,对于每一段,中间放B,这样分成了四段,对于每一段继续这样分,显然26个字母可以安放2^26个位置. 对于树这种结构的话,如何安放? 类似于一条链的…