树的点分治 首先找树的重心,把根节点设为树的重心。然后进行点分治(就是从根开始,看经过根的方案数,在把根删掉,求每棵子树)。
分类:
其他好文 时间:
2016-03-20 19:43:20
阅读次数:
141
题目给一棵树,边带有权值,求每一点到其他点路径上的最大权和。 树上任意两点的路径都可以看成是经过某棵子树根的路径,于是果断树分治。 对于每次分治的子树,计算其所有结点到根的距离;对于每个结点,找到另一个离根最远的且与该结点路径过根的结点,二者的距离和就是这个点在过这棵子树的根能到的最远距离。 现在问
分类:
其他好文 时间:
2016-03-05 23:48:52
阅读次数:
553
树的点分治,在分治的时候将所有点到根的距离依次放入一个数组q中。对于一棵子树里的点,合法的路径一定是q[L]..q[R]的某个数加上自己到重心的距离。定义五元组(v,l,m,r,w),表示当前路径长度为v,在[l,r]里选出最大值m,并加上w。用大根堆维护这些五元组,每次取出v最大的元素,并扩展出[...
分类:
其他好文 时间:
2015-11-23 00:42:56
阅读次数:
192
树的点分治,将点分治的过程记录下来,每一个分治结构按到分治中心的距离维护所有点。对于一个点二分答案,然后在$O(\log n)$个分治结构中二分查找,时间复杂度$O(n\log^3n)$。#include#includeconst int N=50010,M=1000010;int n,m,i,x,...
分类:
其他好文 时间:
2015-10-09 22:55:39
阅读次数:
173
树的点分治,主要思想是每次找子树的重心,计算经过根节点的情况数,再减去点对属于同一子树的情况。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include...
分类:
其他好文 时间:
2015-09-12 16:05:25
阅读次数:
192
题意:
给出一颗n个结点的有根树,边有长度;
每个点有可以购票前往长度相差不超过li的它的祖先,票的花费为pi*长度+qi;
当然的,可以的选择多次倒车到达;
求每个点到根的最小花费;
n
题解:
这题真的好贴心,数据特殊情况都给你让你特判了2333;
首先一条链的情况都会吧,设f[i]为i到根的最小花费,dis为到根的距离;
转移方程为:f[i]=f[j]+p[i]*(...
分类:
其他好文 时间:
2015-08-31 19:45:24
阅读次数:
192
题意:
给出一颗n个结点的树,点上有权值;
求点对(x,y)满足x!=y且x到y的路径上最大值与最小值的差
n
题解:
来填一填当年挖下的坑;
这个数据范围真是恶意。。直接说五组数据不好吗!
考虑这题怎么做,在这场考试那天的前一天,我学习了树分治算法;
然后他就出了,然后我就写了,然后我就写不出来了;
当年的我实在naive;
我翻出了当时交上去的代码,改了好久好久。。...
分类:
移动开发 时间:
2015-08-28 17:35:07
阅读次数:
295
给定一棵树,边上有权值,要统计有多少对点路径的权值和 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #in...
分类:
其他好文 时间:
2015-08-28 15:08:29
阅读次数:
804
题目大意:树上找到有多少条路径的边权值和>=k这里在树上进行点分治,需要找到重心保证自己的不会出现过于长的链来降低复杂度 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 #...
分类:
其他好文 时间:
2015-08-27 18:17:17
阅读次数:
151