![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
文章平均质量分 77
eeeaaaaa
这个作者很懒,什么都没留下…
展开
-
bzoj2152 聪聪可可【点分治】
题意:中文题。。。。。。 按点分治的的方法,每次都求出经过根的可行方案的个数,这里要求是3的倍数,所以我们可以把距离根的距离%3,那么取余后的距离根的距离为1和2的可以组成3,两个0当然也可以,这里用cnt[0],cnt[1],cnt[2]表示0,1,2的个数,对每个1可以有cnt[2]个2与他组成符合条件的路,所以数量就是cnt[1]*cnt[2],从2跑到1也可以所以还要*2,这个结果就是c原创 2015-05-08 19:33:55 · 451 阅读 · 0 评论 -
POJ1987 Distance Statistics【点分治】
题意:给一棵树求之间距离不超过k的点对数量。。 和poj1741一模一样。。。一样的做法。。每次找经过根的点对的数量。。统计数量时,排个序然后头尾开始找数量就好 #include #include #include using namespace std; const int MAXN=40010; const int INF=1<<30; struct EDGE { int v,next;原创 2015-05-09 12:35:42 · 385 阅读 · 0 评论 -
POJ1741 Tree
题意:找出一棵树中有多少个点对之间的距离小于等于k。。 论文上的题。 点分治,找到树的重心,然后计算经过这个重心的点对,计算从根到这个子树每个节点的距离,然后找到所有点对过根的距离小于等于k的,然后再减去再同一棵子树里的就行了,然后分治一直递归下去。。 #include #include #include using namespace std; const int MAXN=10010;原创 2015-05-05 15:45:21 · 271 阅读 · 0 评论 -
HDU5016 Mart Master II【点分治】
题意:给出一棵数,树上有些点有商店,要你建一个商店使你可以得到最多的顾客,顾客选择去离他最近的商店(距离相同去编号小的)。 首先预处理一下所有点离他最近的商店,记录下来编号和距离,用一个pair就好了。first记录距离,second记录编号,排序也刚好符合题意。。预处理感觉和spfa差不多那样弄一下(其他方法我不会。。)。。 然后就是点分治了,找到每一次重心后,求出到这个点的距离,用dis[原创 2015-05-15 19:05:44 · 429 阅读 · 0 评论 -
HDU4871 Shortest-path tree【最短路+点分治】
题意:给出一张图,要求从1点开始跑最短路,并以1为根生产一棵最短路树(长度相同找到字典序最小的),然后求出这个树上恰好经过k个点的最长路径,并输出数量。 从1点跑一遍最短路,然后dfs生产最短路生成树,然后点分治,找到重心之后对重心每条边算一次经过了i个点的最长路,然后还要用数组记录一下前面经过了i个点的最长路。。处理方法在讲点分治的论文上有。 #include #include #inclu原创 2015-05-14 15:55:47 · 409 阅读 · 0 评论