洛谷 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. 精准医疗|研发药物|Encode|roadmap|

    生物医学大数据 精准医疗 研发药物:特异性靶点&过表达靶点 Encode &roadmap找组织特异性的表观遗传学标记.TF.DNA甲基化的动态变化等信息. 生物大数据的标准化与整合- ...

  2. Docker MongoDB 集群搭建

    简单地在Docker环境上搭建一个无认证的MongoDB集群.1.本文使用的容器集群角色 ContainerName IP:portConfig Server cfg_1    10.1.1.2:27 ...

  3. luogu P3835 【模板】可持久化平衡树

    #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> usin ...

  4. 剑指offer【08】- 二叉树的深度(java)

    题目:二叉树的深度 考点:知识迁移能力 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 牛客网上的剑指offer题, ...

  5. JQuery局部刷新与全页面刷新

    局部刷新: 这个方法就多了去了,常见的有以下几种: $.get方法,$.post方法,$.getJson方法,$.ajax方法如下 前两种使用方法基本上一样 $.get(”Default.php”, ...

  6. css 传数据套路

    <input type=hidden> 那么该标签就不会显示 但是我们可以用这个标签储存数据 这是一个利用标签元素隐藏

  7. 关于nginx配置的一个报错connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory)

    针对配置php的情况: linux服务器一般提示这个 connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory) ...

  8. F 乘法(第k大问题)(二分)

    题:https://ac.nowcoder.com/acm/contest/3979/F 题意:俩个序列俩俩相乘得到n*m个数,求第k大的数是哪个 分析:二分 #include<bits/std ...

  9. mysql使用联合索引提示字符长度超限制解决办法

    ​ mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: ​ 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了 ...

  10. ThreadPoolExecutor自定义线程池

    1.ThreadPoolExecutor创建线程池的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...