算法---点分治
pengwill97
C.S Master
展开
-
【算法练习】Luogu 3806 【模板】点分治1(点分治)
题意给定一棵有n个点的树 询问树上距离为k的点对是否存在。题解点分治代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;const int nmax = 1e6+7;c...原创 2018-08-31 19:46:32 · 215 阅读 · 0 评论 -
【算法练习】Luogu 2634 [国家集训队]聪聪可可(点分治)
题意聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经玩儿腻了这种低智商的游戏。他们的爸爸快被他们的争吵烦死了,所以他发明了一个新游戏:由爸爸在纸上画n个“点”,并用n-1条“边”把这n个“点”恰好连通(其实这就是一棵树)。并且每条“边”上都有一个数...原创 2018-08-31 19:49:21 · 187 阅读 · 0 评论 -
【算法学习】树的重心与点分治
树的重心树的重心也叫做树的质心。其本质是一个点,删除这个点后,形成的子树中最大的节点数目最小。解法一遍dfs即可。dfs的时候记录一下当前节点uuu的size[u]size[u]size[u],同时记录他的所有儿子子树中的最大节点数目mxchildmxchildmxchild,那么删除当前节点uuu所形成的子树就是max(mxchild,n−size[u])max(mxchild,n−...原创 2018-08-31 19:58:03 · 1434 阅读 · 0 评论 -
【算法练习】POJ - 1741 Tree(点分治)
题意给一颗树,求树上权值为k的路径条数。题解点分治。代码分别为排序后使用单调性求解,或者是二分求解(注释部分)。 使用单调性O(n)O(n)O(n)更快一些。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef doub...原创 2018-09-09 21:49:50 · 191 阅读 · 0 评论 -
【算法练习】POJ - 2114 Boatherds(点分治)
题意给出一棵树,一些询问,询问树上是否有路径和为k的路径。题解发现询问只有100个,依次处理询问即可。代码这里依旧给出了两种写法, 一种是排序后利用单调性,一种是排序后二分。 利用单调性常数更小。 如果利用单调性,函数要返回cnt<<1cnt<<1cnt...原创 2018-09-09 21:55:45 · 146 阅读 · 0 评论 -
【算法练习】HDU - 4812 D Tree (点分治)
题意求树上是否有路径点权成绩mod1e6+7 = k。若有多对路径,输出节点编号最小的一组。题解逆元 + 点分治即可。代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;c...原创 2018-09-09 22:03:01 · 198 阅读 · 0 评论 -
【算法练习】Luogu P4149 [IOI2011]Race(点分治)
题意给一棵树,每条边有权。求一条简单路径,权值和等于 K,且边的数量最小。题解点分治代码方法1先遍历根节点,然后去除路径节点全在子树的方法。常数稍微大一点。// luogu-judger-enable-o2#include&lt;bits/stdc++.h&gt;using namespace std;typedef double db;typedef ...原创 2018-09-09 22:06:21 · 247 阅读 · 0 评论 -
【算法练习】LightOJ - 1257 Farthest Nodes in a Tree (II) (点分治)
题意求出树上所有点的最远距离。n≤30000n≤30000n \le 30000。题解点分治。 树上最长路径,要么经过当前的重心,要么不经过。所以可以点分治来做。 首先求出重心每一个子树上节点到重心的距离,同时求出每一个子树中到重心的最远点。对于一个子树上的节点,如果他的最长路径经过当前重心,那么一定是他到重心的距离+其他子树中到根节点的最远点的最大值;如果不经过,递归到子树求...原创 2018-09-10 00:33:52 · 144 阅读 · 0 评论