简化题意

m次询问,每次询问x的子树中,与x节点距离不超过y的节点的子树和。n,m≤300,000。


思路

按照dfs序排序,每次将一个点的答案塞到第depu的位置,这样得到一个前缀和,每次询问作减法即可。

可持久化线段树。


代码

 #include<bits/stdc++.h>
using namespace std;
const int maxn=3E5+;
typedef long long int ll;
ll n,m,x,y,sum[maxn],dep[maxn],cur,t[maxn*],root[maxn*],fa[maxn],size,gg;
ll ls[maxn*],rs[maxn*],ti,dfn[maxn],last[maxn],maxx[maxn],head[maxn*];
struct edge{ll to,next;}E[maxn*];
void insert(ll l,ll r,ll pos,ll&num,ll pre,ll val)
{
num=++cur;
t[num]=t[pre];
ls[num]=ls[pre];
rs[num]=rs[pre];
t[num]+=val;
if(l==r)return;
ll mid=(l+r)>>;
if(pos<=mid)insert(l,mid,pos,ls[num],ls[pre],val);
else insert(mid+,r,pos,rs[num],rs[pre],val);
}
ll ask(ll L,ll R,ll l,ll r,ll num)
{
if(L<=l&&r<=R)return t[num];
else if(r<L||R<l)return ;
ll mid=(l+r)>>;
return ask(L,R,l,mid,ls[num])+ask(L,R,mid+,r,rs[num]);
}
void add(ll u,ll v)
{
E[++size].to=v;
E[size].next=head[u];
head[u]=size;
}
void dfs(ll u,ll F,ll d)
{
dep[u]=d;
fa[u]=F;
sum[u]=;
maxx[u]=dfn[u]=++ti;
last[u]=u;
for(ll i=head[u];i;i=E[i].next)
{
ll v=E[i].to;
if(v==F)continue;
dfs(v,u,d+);
sum[u]+=sum[v];
if(maxx[v]>maxx[u])
{
maxx[u]=maxx[v];
last[u]=last[v];
}
}
}
void init(ll u,ll F,ll d)
{
insert(,n,d,root[u],root[gg],sum[u]-);
gg=u;
for(ll i=head[u];i;i=E[i].next)
{
ll v=E[i].to;
if(v==F)continue;
init(v,u,d+);
}
}
int main()
{
// freopen("laugh.in","r",stdin);
// freopen("laugh.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m;
for(ll i=;i<=n-;++i)
{
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs(,,);
gg=;
init(,,);
for(ll i=;i<=m;++i)
{
cin>>x>>y;
if(x==)cout<<ask(,+y,,n,root[last[]])<<endl;
else cout<<(sum[x]-)*min(dep[x]-,y)+
ask(dep[x]+,dep[x]+y,,n,root[last[x]])-ask(dep[x]+,dep[x]+y,,n,root[x])<<endl;
}
return ;
}

洛谷 P3899 [谈笑风生]的更多相关文章

  1. 【洛谷P3899】谈笑风生

    题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,现给出 Q 个询问,每次询问距离 u 号节点不超过 K 的节点 b,c 为 a 与 b 的后代,求这样的三元组有多少个. 题解:学会了线段树 ...

  2. 洛谷P3899 [湖南集训]谈笑风生(线段树合并)

    题意 题目链接 Sol 线段树合并板子题,目前我看到两种写法,分别是这样的. 前一种每次需要新建一个节点,空间是\(O(4nlogn)\) 后者不需要新建,空间是\(O(nlogn)\)(面向数据算空 ...

  3. 【洛谷 P3899】 [湖南集训]谈笑风生 (主席树)

    题目链接 容易发现\(a,b,c\)肯定是在一条直链上的. 定义\(size(u)\)表示以\(u\)为根的子树大小(不包括\(u\)) 分两种情况, 1.\(b\)是\(a\)的祖先,对答案的贡献是 ...

  4. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  8. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  9. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

随机推荐

  1. 在 .Net Core1.0 上使用Mysql 的EFcore

    https://www.codeproject.com/Articles/1218348/Using-EF-Core-with-MySQL-in-DotNet-Core

  2. day07 Python文件操作

    一,文件操作基本流程 #1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作 d ...

  3. react和vue,angular的比较

    就这几天我所了解到react情况和大家探讨一下子react的知识: react由facebook团队维护的一套框架,已经应用在instagram网站上了,react以其独特的性能优化方案,正在被越来越 ...

  4. python 用lambda表达式代替简单的函数, 匿名函数

    lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方 格式: lambda 参数列表:return [表达式] 变量 由于lambda返回的是函数对象(构建的是一个函数对象),所 ...

  5. nginx-负载均衡相关配置 第五章

    一.负载均衡: 通过反向代理客户端的请求到一个服务器群组,通过某种算法,将客户端的请求按照自定义的有规律的一种调度调度给后端服务器. Nginx的负载均衡使用upstream定义服务器组,后面跟着组名 ...

  6. 【题解】Luogu P2763 试题库问题

    原题传送门 这题很简单啊 从源点向k类题目分别连流量为所需数量的边 从每道题向汇点连一条流量为1的边(每题只能用1次) 从类型向对应的题目连一条流量为1的边 跑一遍最大流 如果最大流小于所需题目数量, ...

  7. 经典算法问题的java实现 (一)

    原文链接: http://liuqing-2010-07.iteye.com/blog/1396859   1.如何计算闰年(Leap Year)?   四年一闰:百年不闰:四百年再闰.   具体参照 ...

  8. iOS开发 -------- transform属性(形变)

      一 transform属性 在OC中,通过transform属性可以修改对象的平移,比例和旋转角度 常用的创建transform结构体的方法分两大类 (1) 创建"基于控件初始位置&qu ...

  9. 腾讯云centos7.2安装jdk1.7 tomcat7.0部署项目示例

    说实话win server的性能并不好,所以程序员必须会在Linux上安装环境,部署项目. 第一步,官网下载tomcat和jdk压缩文件*.tar.gz  下载路径如下: jdk:http://www ...

  10. JS(JavaScript)的初了解2(更新中···)

    1.parseInt()    整数型 字符串中的数字取整 遇到第一个是非数字的字节就结束了. 2.parseFloat 浮点型 字符中的数字取整数和小数,有两个小数点的话第二个小数点无效第二个小数点 ...