洛谷 P3806 传送门

这个点分治都不用减掉子树里的了,直接搞就行了。

注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>。

因为这个WA了半天......

如果memset清空ex数组显然是会T的,所以开一个bef用来记录需要清空哪个地方。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int n,m;
int hd[],to[],nx[],len[],ec;
int qu[],ans[]; void edge(int af,int at,int el)
{
to[++ec]=at;
len[ec]=el;
nx[ec]=hd[af];
hd[af]=ec;
} int rt,tot;
int sz[],mx[];
int del[]; void weigh(int p,int fa)
{
sz[p]=;mx[p]=;
for(int i=hd[p];i;i=nx[i])
{
int t=to[i];
if(t==fa||del[t])continue;
weigh(t,p);
sz[p]+=sz[t];
mx[p]=max(mx[p],sz[t]);
}
mx[p]=max(mx[p],tot-sz[p]);
if(mx[p]<mx[rt])rt=p;
} int dis[];
int buf[],tp,ex[],bef[],btp; void dfs(int p,int fa)
{
buf[++tp]=dis[p];
for(int i=hd[p];i;i=nx[i])
{
int t=to[i];
if(fa==t||del[t])continue;
dis[t]=dis[p]+len[i];
dfs(t,p);
}
} void count(int p)
{
btp=;
for(int i=hd[p];i;i=nx[i])
{
int t=to[i];
if(del[t])continue;
tp=;dis[t]=len[i];
dfs(t,p);
for(int j=;j<=tp;j++)
for(int k=;k<=m;k++)
if(qu[k]>=buf[j])
ans[k]|=ex[qu[k]-buf[j]];
for(int j=;j<=tp;j++)
bef[++btp]=buf[j],ex[buf[j]]=;
}
for(int i=;i<=btp;i++)ex[bef[i]]=;
} void conquer(int p)
{
del[p]=ex[]=;
count(p);
for(int i=hd[p];i;i=nx[i])
{
int t=to[i];
if(del[t])continue;
rt=;tot=sz[t];
weigh(t,);
conquer(rt);
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
{
int ff,tt,vv;
scanf("%d%d%d",&ff,&tt,&vv);
edge(ff,tt,vv);
edge(tt,ff,vv);
}
for(int i=;i<=m;i++)scanf("%d",&qu[i]);
mx[]=tot=n;
weigh(,);
conquer(rt);
for(int i=;i<=m;printf("\n"),i++)
printf(ans[i]?"AYE":"NAY");
return ;
}

[洛谷P3806] [模板] 点分治1的更多相关文章

  1. 洛谷 P3806 (点分治)

    题目:https://www.luogu.org/problem/P3806 题意:一棵树,下面有q个询问,问是否有距离为k的点对 思路:牵扯到树上路径的题都是一般都是点分治,我们可以算出所有的路径长 ...

  2. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  3. 洛谷 P3806 点分治模板

    题目:https://www.luogu.org/problemnew/show/P3806 就是点分治~ 每次暴力枚举询问即可,复杂度是 nmlogn: 注意 tmp[0]=1 ! 代码如下: #i ...

  4. 洛谷P3810 陌上花开 CDQ分治(三维偏序)

    好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...

  5. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

  6. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  7. 【AC自动机】洛谷三道模板题

    [题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...

  8. 洛谷-P5357-【模板】AC自动机(二次加强版)

    题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...

  9. 洛谷.1919.[模板]A*B Problem升级版(FFT)

    题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...

随机推荐

  1. JavaWeb之Servlet入门(二)

    1. 准备 在JavaWeb之Servlet入门(一)中,我们完成了第一个Servlet程序,完成了从URL到后台控制器的中转过程,接下来我们延续JavaWeb之Servlet入门(一)学习下如何传参 ...

  2. Centos配置NAT模式下的静态ip

    一.查看所在的ip段 点击 编辑-->虚拟网卡编辑器 选中vmware8网卡,点击 DHCP设置 二.编辑网卡配置文件 查看网卡 ip addr 命令打开配置文件 vi /etc/sysconf ...

  3. PHP静态方法和普通方法的区别

    <?php header('content-type:text/html;charset=utf-8'); /* 普通方法,存放类内,只有一份 静态方法,也是存放于类内,只有一份 区别在于:普通 ...

  4. 正确返回Unicode码点大于0xFFFF的字符串长度

    如下: function codePointLength(text){ var result = text.match(/[\s\S]/gu); return result? result.lengt ...

  5. sklearn连续型数据离散化

    二值化 设置一个condition,把连续型的数据分类两类.比如Age,大于30,和小于30. from sklearn.preprocessing import Binerize as Ber x ...

  6. Ubuntu源码编译安装tensorflow

    ubuntu14 cuda9.0_384.81 驱动版本384.90  cudnn7.2 tensorflow1.8 https://blog.csdn.net/pkokocl/article/det ...

  7. GetTextExtentPoint32

    /////////////////////////////////////////////////////////////// // 04FirstWindow.cpp文件 #include < ...

  8. gulp自动化添加版本号并修改为参数格式

    问题: 当我们修改js和css文件时往往需要清除浏览器的缓存,否则有些效果就看不到更新过后的. 通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会 ...

  9. 黑马eesy_15 Vue:常用语法

    自学Java后端开发,发现14 微服务电商[乐优商城]实战项目,在介绍完SpringCloud后就要肝前端的基础知识ES6语法和Vue.js 所以本篇博客作为入门Vue练习记录的过程,目的是供自学后端 ...

  10. Vue环境搭建-项目的创建-启动生命周期-组件的封装及应用

    vue项目环境的搭建 """ node >>> python:node是用c++编写用来运行js代码的 npm(cnpm) >>> p ...