bzoj 3653 谈笑风生——主席树
题目: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 谈笑风生——主席树的更多相关文章
- bzoj 3653 谈笑风生 —— 主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 对于一个 (a,b,c),分成 b 是 a 的祖先和 b 在 a 子树里两部分: 第一 ...
- BZOJ 3653: 谈笑风生(主席树)
传送门 解题思路 首先对于一个\(a\)来说,要求\(b\)和\(c\),那么\(a,b,c\)一定在一条链上.把\(b\)分类讨论,如果\(b\)是\(a\)的祖宗,这个方案数就很好统计了,就是\( ...
- 主席树 || 可持久化线段树 || BZOJ 3653: 谈笑风生 || Luogu P3899 [湖南集训]谈笑风生
题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的 ...
- bzoj 3653: 谈笑风生【dfs序+主席树】
考虑b的两种情况,一种是p的祖先,这种点有min(k,de[p]-1)个,然后每个这种b都有si[p]-1个c点可选: 另一种是p的子孙,要求是在p的子树内且deep在de[p]+1~de[p]+k之 ...
- BZOJ.3653.谈笑风生(长链剖分/线段树合并/树状数组)
BZOJ 洛谷 \(Description\) 给定一棵树,每次询问给定\(p,k\),求满足\(p,a\)都是\(b\)的祖先,且\(p,a\)距离不超过\(k\)的三元组\(p,a,b\)个数. ...
- BZOJ 3653: 谈笑风生(离线, 长链剖分, 后缀和)
题意 给你一颗有 \(n\) 个点并且以 \(1\) 为根的树.共有 \(q\) 次询问,每次询问两个参数 \(p, k\) .询问有多少对点 \((p, a, b)\) 满足 \(p,a,b\) 为 ...
- BZOJ 3524 Couriers | 主席树
BZOJ 3524 Couriers 题意 求一个区间内出现超过区间长度的一半的数,如果没有则输出0. 题解 我可能太菜了吧--这道题愣是没想出来-- 维护权值主席树,记录每个数都出现过多少次: 查询 ...
- BZOJ 3653 谈笑风生
ORZ blutrex...... 主席树. #include<iostream> #include<cstdio> #include<cstring> #incl ...
- bzoj 2588 树上主席树
主席树上树,对于每个节点,继承其父亲的,最后跑f[x]+f[y]-f[lca]-f[fa[lca]] 去重竟然要减一,我竟然不知道?? #include<cstdio> #include& ...
随机推荐
- ReentrentLock重入锁
ReentrentLock lock=new ReentrentLock(); lock.lock(); //锁的代码 finally{ lock.unlock(); } ReentrentLock ...
- 【selenium】Selenium基于Python3的Web自动化测试脚本在IE上运行慢的解决方法
阐述问题: 执行自动化脚本时,发现文本输入在IE浏览器上特别慢,这样大大降低了自动化效率 解决办法:原因是原先下载的IEDriverServer.exe为64位系统的IE,换为32位的IEDriver ...
- eclipse集成tomcat改动字符集參数
问题: 在eclipse 4.4(Luna)中集成tomcat时,直接改动原tomcat文件夹中的配置文件,不起作用. 有时.我们会修改字符集參数为utf-8,以解决中文乱码问题,修改之后依旧乱码-- ...
- String代码示例
package lianxi; public class lianxi0112 { public static void main(String[] args) { // TODO 自动生成的方法存根 ...
- pycharm连git和gitee
http://www.cnblogs.com/feixuelove1009/p/5955332.html https://www.58jb.com/html/171.html
- Django项目之【学员管理系统】
Django项目[学员管理系统] 项目规划阶段 项目背景 现实生活中,特别是在学校,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求. 因此需一套方便易用的“学员管理系统”,来提高 ...
- nodejs 版本dockerfile 文件制作,和常用命令
Dockerfile 如下 官方的node6.3的版本有点难下载,建议去网易蜂巢 https://c.163.com/hub pull hub.c.163.com/library/node:6.9 ...
- Arcgis SOE学习
http://blog.csdn.net/lovecarpenter/article/details/53178233 http://blog.csdn.net/lovecarpenter/artic ...
- 应用索引技术优化SQL 语句(转)
原文出处 一.前言 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致 ...
- 在pycharm中执行脚本没有报错但输出显示Redirection is not supported.
没有新式语法错误,但是输出显示Redirection is not supported.(不支持重定向) 在stockflow中找到是因为从IDE中运行脚本的原因,比如pycharm,所有IDE都提供 ...