思路: 点分治 提交:5次 题解: 刚开始用排序+双指针写的,但是调了一晚上,总是有两个点过不了,第二天发现原因是排序时的$cmp$函数写错了:如果对于路径长度相同的,我们从小往大按边数排序,当双指针出现$==k$时,即我们应先左移右指针,否则答案可能会变劣(仔细想一想);若反着排序,应该先右移左指 ...
分类:
其他好文 时间:
2019-08-31 11:01:40
阅读次数:
64
对于这道题,明显是点分治,权值等于k,可以用桶统计树上路径(但注意要清空); 对于每颗子树,先与之前的子树拼k,再更新桶,维护t["len"]最小边数; ...
分类:
其他好文 时间:
2019-04-20 13:07:09
阅读次数:
114
毕竟是人生第一道IOI(现在已经挂了又A了~~),就认真写一写吧。 竟然有爆栈这种操作(亏我花了一个多小时优化时间以为RE是TLE) 题面一看就是淀粉质。(感觉好裸) 以下是同学的挂掉做法 1 #include<bits/stdc++.h> 2 using namespace std; 3 temp ...
分类:
其他好文 时间:
2019-02-02 00:18:55
阅读次数:
198
传送门 十分显然的点分治 枚举所有点作为两点的LCA 开一个桶$pd$判断之前子树内是否出现过此路程 对于每一个子树都把子树到根的所有路程dis都考虑匹配 如果 $pd[K-dis]=1$ 那么就说明存在匹配 然鹅题目还要求在合法匹配中选最少经过边数的匹配 那么再开一个数组 $dd$ ,$dd[i] ...
分类:
其他好文 时间:
2019-01-23 14:01:00
阅读次数:
170
"Luogu4149 [IOI2011]Race" 真真正正的淀粉质模板题。 为什么?之前那个O(N^2)检验子树的算法对于菊花图就很呵呵。 这个题,难点在于对子树的统计。 我们无法使用容斥一类的思想。 但是我们可以使用一种其他的方法。 也就是利用其中一颗的子树与其他子树的信息进行统计答案。 这样的 ...
分类:
其他好文 时间:
2019-01-19 21:48:46
阅读次数:
147
Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N include include include include define Fi first define Se second define MK make_pair define inf 0x7f7f ...
分类:
其他好文 时间:
2019-01-03 12:53:29
阅读次数:
186
题意 给一棵树,每条边有权。求一条简单路径,权值和等于 $K$,且边的数量最小。 点分治,求距离时带上经过边的数量即可。用的第一种写法(下面)。 食用淀粉质注意事项 1、 统计子树内答案的两种写法: 跟树形dp一样将某子树与前面的子树合并 或者是 考虑所有子树的答案再容斥,减去不合法的一棵子树内答案 ...
分类:
其他好文 时间:
2018-12-16 00:49:19
阅读次数:
181
点分治,用一个mn[v]数组记录当前root下长为v的链的最小深度,每次新加一个儿子的时候都在原来儿子更新过的mn数组里更新ans(也就是查一下mn[m dis[p]]+de[p]) 这里注意更新和初始化的时候不能对整个mn操作,这样时间复杂度是错的,要开一个栈存一下更新了哪些点,只初始化这些点即可 ...
分类:
其他好文 时间:
2018-12-11 19:54:07
阅读次数:
159
题意 "Here" 思考 简要题意:给一棵树,每条边有权。求一条简单路径,权值和等于 $K$,且边的数量最小。 由于这条最小路径可以是所有路径中的任意一个,所以所有等于 $K$ 的路径我们必须考虑到,关于树上的路径统计问题,我们选用点分治。 这样一想就是点分治裸题了,由于 $K \leq 1e6$, ...
分类:
其他好文 时间:
2018-11-27 01:34:33
阅读次数:
184