题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653

原来一直想怎么线段树合并。可是不会把角标挪一位。

查询的其实是子树内一段深度的点的 siz 和。因为是子树内,所以按 dfs 序建立主席树,角标是 dep ,值是 siz 。

注意 long long 。而且数组 *19 就会 RE ,*20就好了。不知为何。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=3e5+,M=N*;
int n,Q,hd[N],xnt,to[N<<],nxt[N<<],siz[N],dfn[N],tim;
int tot,rt[N],ls[M],rs[M],dep[N];
ll sm[M];
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
void write(ll x)
{
if(x<)putchar('-'),x=-x;
if(x<){putchar(x+'');return;}
write(x/); putchar(x%+'');
}
void add(int x,int y)
{
to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;
}
void dfs(int cr,int fa)
{
siz[cr]=; dep[cr]=dep[fa]+;
for(int i=hd[cr],v;i;i=nxt[i])
if((v=to[i])!=fa)dfs(v,cr),siz[cr]+=siz[v];
}
void mrg(int l,int r,int &cr,int pr,int p,int k)
{
cr=++tot; sm[cr]=sm[pr]+k;
if(l==r)return; int mid=l+r>>;
ls[cr]=ls[pr]; rs[cr]=rs[pr];
if(p<=mid)mrg(l,mid,ls[cr],ls[pr],p,k);
else mrg(mid+,r,rs[cr],rs[pr],p,k);
}
void dfsx(int cr,int fa)
{
dfn[cr]=++tim; mrg(,n,rt[dfn[cr]],rt[dfn[cr]-],dep[cr],siz[cr]-);
for(int i=hd[cr],v;i;i=nxt[i])
if((v=to[i])!=fa)dfsx(v,cr);
}
ll query(int l,int r,int cr,int pr,int L,int R)
{
if(l>=L&&r<=R)return sm[cr]-sm[pr];
int mid=l+r>>; ll ret=;
if(L<=mid)ret=query(l,mid,ls[cr],ls[pr],L,R);
if(mid<R)ret+=query(mid+,r,rs[cr],rs[pr],L,R);
return ret;
}
int main()
{
n=rdn(); Q=rdn();
for(int i=,u,v;i<n;i++)
{
u=rdn(); v=rdn(); add(u,v); add(v,u);
}
dfs(,); dfsx(,);
for(int i=,p,k;i<=Q;i++)
{
p=rdn(); k=rdn();
ll ans=(ll)min(k,dep[p]-)*(siz[p]-);
if(siz[p]>)
ans+=query(,n,rt[dfn[p]+siz[p]-],rt[dfn[p]],dep[p]+,dep[p]+k);
write(ans); puts("");
}
return ;
}

bzoj 3653 谈笑风生——主席树的更多相关文章

  1. bzoj 3653 谈笑风生 —— 主席树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 对于一个 (a,b,c),分成 b 是 a 的祖先和 b 在 a 子树里两部分: 第一 ...

  2. BZOJ 3653: 谈笑风生(主席树)

    传送门 解题思路 首先对于一个\(a\)来说,要求\(b\)和\(c\),那么\(a,b,c\)一定在一条链上.把\(b\)分类讨论,如果\(b\)是\(a\)的祖宗,这个方案数就很好统计了,就是\( ...

  3. 主席树 || 可持久化线段树 || BZOJ 3653: 谈笑风生 || Luogu P3899 [湖南集训]谈笑风生

    题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的 ...

  4. bzoj 3653: 谈笑风生【dfs序+主席树】

    考虑b的两种情况,一种是p的祖先,这种点有min(k,de[p]-1)个,然后每个这种b都有si[p]-1个c点可选: 另一种是p的子孙,要求是在p的子树内且deep在de[p]+1~de[p]+k之 ...

  5. BZOJ.3653.谈笑风生(长链剖分/线段树合并/树状数组)

    BZOJ 洛谷 \(Description\) 给定一棵树,每次询问给定\(p,k\),求满足\(p,a\)都是\(b\)的祖先,且\(p,a\)距离不超过\(k\)的三元组\(p,a,b\)个数. ...

  6. BZOJ 3653: 谈笑风生(离线, 长链剖分, 后缀和)

    题意 给你一颗有 \(n\) 个点并且以 \(1\) 为根的树.共有 \(q\) 次询问,每次询问两个参数 \(p, k\) .询问有多少对点 \((p, a, b)\) 满足 \(p,a,b\) 为 ...

  7. BZOJ 3524 Couriers | 主席树

    BZOJ 3524 Couriers 题意 求一个区间内出现超过区间长度的一半的数,如果没有则输出0. 题解 我可能太菜了吧--这道题愣是没想出来-- 维护权值主席树,记录每个数都出现过多少次: 查询 ...

  8. BZOJ 3653 谈笑风生

    ORZ blutrex...... 主席树. #include<iostream> #include<cstdio> #include<cstring> #incl ...

  9. bzoj 2588 树上主席树

    主席树上树,对于每个节点,继承其父亲的,最后跑f[x]+f[y]-f[lca]-f[fa[lca]] 去重竟然要减一,我竟然不知道?? #include<cstdio> #include& ...

随机推荐

  1. ReentrentLock重入锁

    ReentrentLock lock=new ReentrentLock(); lock.lock(); //锁的代码 finally{ lock.unlock(); } ReentrentLock ...

  2. 【selenium】Selenium基于Python3的Web自动化测试脚本在IE上运行慢的解决方法

    阐述问题: 执行自动化脚本时,发现文本输入在IE浏览器上特别慢,这样大大降低了自动化效率 解决办法:原因是原先下载的IEDriverServer.exe为64位系统的IE,换为32位的IEDriver ...

  3. eclipse集成tomcat改动字符集參数

    问题: 在eclipse 4.4(Luna)中集成tomcat时,直接改动原tomcat文件夹中的配置文件,不起作用. 有时.我们会修改字符集參数为utf-8,以解决中文乱码问题,修改之后依旧乱码-- ...

  4. String代码示例

    package lianxi; public class lianxi0112 { public static void main(String[] args) { // TODO 自动生成的方法存根 ...

  5. pycharm连git和gitee

    http://www.cnblogs.com/feixuelove1009/p/5955332.html https://www.58jb.com/html/171.html

  6. Django项目之【学员管理系统】

    Django项目[学员管理系统] 项目规划阶段 项目背景 现实生活中,特别是在学校,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求. 因此需一套方便易用的“学员管理系统”,来提高 ...

  7. nodejs 版本dockerfile 文件制作,和常用命令

    Dockerfile 如下 官方的node6.3的版本有点难下载,建议去网易蜂巢  https://c.163.com/hub pull hub.c.163.com/library/node:6.9 ...

  8. Arcgis SOE学习

    http://blog.csdn.net/lovecarpenter/article/details/53178233 http://blog.csdn.net/lovecarpenter/artic ...

  9. 应用索引技术优化SQL 语句(转)

    原文出处 一.前言 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致 ...

  10. 在pycharm中执行脚本没有报错但输出显示Redirection is not supported.

    没有新式语法错误,但是输出显示Redirection is not supported.(不支持重定向) 在stockflow中找到是因为从IDE中运行脚本的原因,比如pycharm,所有IDE都提供 ...