"原题链接" 这题好毒瘤啊! 首先看到是树上查询全局某式子的最大值,珂以想到这题无外乎是链分治($\text{dsu on tree}$)或点分治。~~作为一个专业的链分治选手,~~ 窝在比赛中想了$30$min也不会。比赛后想了想,好像$\text{dsu on tree}$不星(珂能还是窝太菜了 ...
分类:
其他好文 时间:
2020-03-01 00:09:07
阅读次数:
75
T1 假如max(a)<0的话直接把所有的a排个序贪心选择大的尽量多 现在考虑一个正的ai对后面的影响 维护一个大根堆,a<0就往里添,a>=0就去抵消堆顶元素 这样新序列(堆里的元素)就可以像刚才那样做了 T2 先把点按权值从大到小排序 然后枚举那个点可以选也可以不选 前面的都已经选了 然后在当前 ...
分类:
其他好文 时间:
2020-02-29 22:08:02
阅读次数:
60
1、递归:(归去来兮) 递归效率较低,如果明确知道迭代次数,则能用迭代最好用迭代,递归是函数自己调用自身,每次调用都需要入栈等操作。但是递归操作要比迭代简单和清楚。 2、斐波那契数列的递归实现 #include <stdio.h> int Fib(int i); int main() { int i ...
分类:
其他好文 时间:
2020-02-29 00:27:45
阅读次数:
72
"CF1303G" (点分治+李超线段树) 题目大意 给你一棵 n 个点的带点权的树,你需要求出树上的一个路径 $x_1,x_2,\ldots,x_k,最大化 \sum_{i=1}^kia_{x_i}$,求最大权值。 数据范围 $2\le n\le 150000$ 一条最大的路径并不好考虑如何直接求 ...
分类:
其他好文 时间:
2020-02-28 20:46:49
阅读次数:
69
描述给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输出。输入第一行包含一个整数n,表示数组的大小。n < 100000。第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。第三行包含一个整数m。m < n。输出从大到小输出前m大的数, ...
分类:
其他好文 时间:
2020-02-27 23:47:47
阅读次数:
137
题意简述 给定一棵 $n$ 个点的树,起初每个点都为黑色。 2种操作,要么改变某个点的颜色(由黑至白或由白至黑),要么询问距离最远的两个黑点间的距离。 共 $m$ 次操作。 $n\leq 10^5,m\leq 2\times 10^5$ 想法 动态点分治模板题。 如果只有一次询问操作,那么显然可以用 ...
分类:
其他好文 时间:
2020-02-27 19:16:32
阅读次数:
42
"题目链接" 转换一下问题就是求每个点的最大长度,容易想到树的直径,一个点的最大长度就是他到两个端点长度的最大值,那我们就可以跑3遍dfs,第一遍求出直径的一个点,第二遍求出每个点到这个点的最大距离,第三遍利用第二遍求得的直径的另一点,反向跑,答案就是两者的最大值 这题好像还可以用点分治或者两遍df ...
分类:
其他好文 时间:
2020-02-26 23:23:24
阅读次数:
114
题目描述 题解 考虑把式子化一下,因为只有一个式子跟第二棵树有关,所以我们可以考虑把前面的式子化成跟 $\text{lca}$ 没有关系,即 $\frac{1}{2}(dp_u+dp_v+dis(u,v))$ 。因此我们可以利用边分治,每次把两边的点黑白染色,构成虚树,然后做 $\text{dp}$ ...
分类:
其他好文 时间:
2020-02-26 21:06:14
阅读次数:
60
快速排序其实是使用分治法的思想,即在原数组中找一个数p,然后将原数组中比数p大的数放到此数的右边,比数p小的数放到次数的左边。 口诀:1.找中轴 2.左边快排 3.右边快排 主体代码如下: void quick_sort(int * data,int left,int right){ if(left ...
分类:
编程语言 时间:
2020-02-26 01:29:39
阅读次数:
89
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;void mergeSort(int a[], int s, int e, int temp[]) { if (s < e) { int m = s + (e - ...
分类:
编程语言 时间:
2020-02-25 20:27:18
阅读次数:
75