点分治的入门练习。

题目链接

BZOJ的链接(权限题)

关于点分治的思想我就不再重复了,这里重点说一下如何判重。

我们来看上图,假设我们去除了1节点,求出d[2]=1,d[3]=d[4]=2

假设k为5,这样我们会认为节点(2,3)(2,4)(3,4)的距离小于k,从而累计到答案中

但是我们以2为root做点分治时还会将(3,4)计算一遍,这样就重复了

所以我们每一次计算答案时还要讲所有多余情况减去,最终答案才是我们要求的答案

不难发现多余情况是在root节点与root子节点重复统计的,我们在点分治时将所有root子节点的答案减去就好了

# include<iostream>
# include<cstdio>
# include<algorithm>
# include<set>
# include<cmath>
using namespace std;
const int mn = ;
struct edge{int to,next,dis;};
edge e[mn*];
int head[mn],edge_max;
void add(int x,int y,int z)
{
e[++edge_max].to=y;
e[edge_max].dis=z;
e[edge_max].next=head[x];
head[x]=edge_max;
}
bool vis[mn];
int n,k,ans;
int mx[mn],siz[mn],root,sum;
int d[mn],deep[mn];
void getroot(int x,int fa)
{
siz[x]=,mx[x]=;
for(int i=head[x];i;i=e[i].next)
{
int u=e[i].to;
if(u==fa || vis[u])
continue;
getroot(u,x);
siz[x]+=siz[u];
mx[x]=max(mx[x],siz[u]);
}
mx[x]=max(mx[x],sum-siz[x]);
if(mx[root]>mx[x])
root=x;
}
void getdeep(int x,int fa)
{
deep[++deep[]]=d[x];
for(int i=head[x];i;i=e[i].next)
{
if(e[i].to==fa || vis[e[i].to])
continue;
d[e[i].to]=d[x]+e[i].dis;
getdeep(e[i].to,x);
}
}
int cal(int x,int now)
{
d[x]=now,deep[]=;
getdeep(x,);
sort(deep+,deep++deep[]);
int t=,l,r;
for(int l=,r=deep[];l<r;)
{
if(deep[l]+deep[r]<=k)
{
t+=r-l;
l++;
}
else r--;
}
return t;
}
void solve(int x)
{
vis[x]=;
ans+=cal(x,);
for(int i=head[x];i;i=e[i].next)
{
if(vis[e[i].to])
continue;
ans-=cal(e[i].to,e[i].dis);
sum=siz[e[i].to];
root=;
getroot(e[i].to,root);
solve(root);
}
}
int main()
{
int x,y,z;
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z),add(y,x,z);
}
scanf("%d",&k);
mx[]=<<,sum=n;
getroot(,);
solve(root);
printf("%d\n",ans);
return ;
}

洛谷4178 BZOJ1468 Tree题解点分治的更多相关文章

  1. BZOJ2654 & 洛谷2619:tree——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2654 https://www.luogu.org/problemnew/show/P2619 给你 ...

  2. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  3. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  4. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  5. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  6. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  7. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  8. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  9. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

随机推荐

  1. Puppet基础应用

    Puppet简介 IT基础设施自动化管理工具,作者:Luck Kanies,官方站点:www.puppetlabs.com 管理设施的整个生命周期: provisioning.configuratio ...

  2. consul原理

    阅读目录 一.使用Consul做服务发现的若干姿势 1.https://www.cnblogs.com/bossma/p/9756809.html 阅读目录 启动第1个Server节点,集群要求要有3 ...

  3. js 高亮显示关键字

    示例: var defaultEmphasisHandler = function(keyword, data){ var regex = RegExp("("+keyword.r ...

  4. ADO.NET实体数据模型

    本文说一下如何使用ADO.NET实体数据模型,并解释一些概念. 1,首先你要建立一个数据库.比如我在SQL2005上面建立了数据库student,包含两个表: 2,然后再项目上添加新建项: 3,打开新 ...

  5. Java基础-注解

    什么是注解? Jdk1.5新增新技术,注解.很多框架为了简化代码,都会提供有些注解.可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件. 注解不会也不能影响代码的实 ...

  6. CHARINDEX函数

    CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置.CHARINDEX函数调用方法如下:    CHARINDEX ( expression1 , expression2 [ , st ...

  7. pycharm最新激活码2017

    最新的2017激活码 BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZW ...

  8. 荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly

    WebAssembly 是一种新的W3C规范,无需插件可以在所有现代浏览器中实现近乎原生代码的性能.同时由于 WebAssembly 运行在轻量级的沙箱虚拟机上,在安全.可移植性上比原生进程更加具备优 ...

  9. 『StabilityGuide』| 10+位阿里技术专家共同发起稳定性知识库开源项目

    我们穿过山和大海,也见过人山人海.我们见过各类故障,也排过千雷万险.这一次,不如我们一起,开启稳定性的探索之旅.让无法解决的问题少一点点,让世界的确定性多一点点. 无论是前端业务的开发者,还是后端架构 ...

  10. leetcode 60-80 easy

    66.Plus One Given a non-empty array of digits representing a non-negative integer, plus one to the i ...