一些闲话

这题方法好多啊QAQ,离线有BIT、长链剖分,在线有线段树合并,主席树等。

要我出题绝对不可能放离线过。。。

题面链接

权限题诶

洛谷

题意简述

简单的看一下题意,就是给定\(a\),求任何一个距\(a\)距离不超过给定的\(k\)的\(b\),然后求一个\(c\)使得是\(a,b\)的后代。

sol

我相信你已经看出来了,\(abc\)在一条直上直下的链上,不过这并没有什么用。我们考虑当\(b\)是\(a\)的祖先时,\(a\)子树内所有除它自己以外的点都可以做\(c\)这个可以直接统计。当\(a\)是\(b\)的祖先时,\(b\)子树内所有除它以外的点都可以做\(c\)。那么每个节点搞一个权值线段树维护一下就可以辣。然后显然这个空间复杂度会爆炸,于是就可以愉快的线段树合并辣。

#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define gt getchar()
#define ll long long
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
inline int in()
{
int k=0;char ch=gt;
while(ch<'-')ch=gt;
while(ch>'-')k=k*10+ch-'0',ch=gt;
return k;
}
const int N=600005;
std::vector<int>Q[N],id[N];
using std::min;
using std::max;
struct node
{
ll siz;int lc,rc;
}t[N*30];
int tot,opt;
ll query(int L,int R,int l,int r,int x)
{
if(!x)return 0;
if(L<=l&&r<=R)return t[x].siz;
int mid=l+r>>1;ll res=0;
if(mid>=L)res+=query(L,R,l, mid ,t[x].lc);
if(mid< R)res+=query(L,R,mid+1,r,t[x].rc);
return res;
}
void upd(int l,int r,int pos,int &x,int v)
{
if(!x)x=++tot;t[x].siz+=v;
if(l==r)return;
int mid=l+r>>1;
if(mid>=pos)upd(l,mid,pos,t[x].lc,v);
else upd(mid+1,r,pos,t[x].rc,v);
}
int merge(int u,int v,int l,int r)
{
if(!u||!v)return u|v;
int mid=l+r>>1,x=++tot;
t[x].siz=t[u].siz+t[v].siz;
t[x].lc=merge(t[u].lc,t[v].lc,l, mid );
t[x].rc=merge(t[u].rc,t[v].rc,mid+1,r);
return x;
}
int siz[N],rt[N],a[N],b[N],fa[N],head[N],to[N],nxt[N],cnt,sz,dep[N];
ll ans[N];
inline void add(int u,int v)
{
to[++cnt]=v,nxt[cnt]=head[u],head[u]=cnt;
to[++cnt]=u,nxt[cnt]=head[v],head[v]=cnt;
}
void dfs(int u,int pa=0)
{
dep[u]=dep[pa]+1;siz[u]=1;//printf("u=%d pa=%d\n",u,pa);
for(int i=head[u];i;i=nxt[i])
if(to[i]!=pa)
dfs(to[i],u),siz[u]+=siz[to[i]];
upd(1,sz,dep[u],rt[u],siz[u]-1);
if(pa)rt[pa]=merge(rt[pa],rt[u],1,sz);
}
int main()
{
int n=in(),q=in();sz=n;
for(int i=1;i<n;++i)add(in(),in());
dfs(1);
for(int i=1;i<=q;++i)
{
int x=in(),y=in();
printf("%lld\n",query(dep[x]+1,dep[x]+y,1,n,rt[x])+1ll*(siz[x]-1)*min(dep[x]-1,y));
}
return 0;
}

BZOJ3635谈笑风生的更多相关文章

  1. 【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树

    3653: 谈笑风生 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 628  Solved: 245[Submit][Status][Discuss] ...

  2. BZOJ3653: 谈笑风生

    Description 设T 为一棵有根树,我们做如下的定义:• 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道高明到哪里去了”.• 设a 和 b 为 T 中的两个不同节点.如 ...

  3. 老码农教你在 StackOverflow 上谈笑风生

    作为一个高大上的码农,你肯定用到过 StackOverflow,必须的.会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门.StackOverflow 对于码农的重要性,基本就和诸葛亮对刘备 ...

  4. 数据结构(主席树):COGS 2211. 谈笑风生

    2211. 谈笑风生 ★★★★   输入文件:laugh.in   输出文件:laugh.out   简单对比时间限制:3 s   内存限制:512 MB [问题描述] 设T 为一棵有根树,我们做如下 ...

  5. 【NOI模拟】谈笑风生(主席树)

    题目描述 设 T 为一棵有根树,我们做如下的定义: 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称 “ a 比 b 不知道高明到哪里去了 ” . 设 a 和 b 为 T 中 ...

  6. bzoj 3653 [湖南集训]谈笑风生

    题目描述 设 T 为一棵有根树,我们做如下的定义: • 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称"a 比 b 不知道高明到哪里去了". • 设 a ...

  7. BZOJ_3653_谈笑风生_树状数组

    BZOJ_3653_谈笑风生_树状数组 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ...

  8. 【BZOJ3653】谈笑风生(长链剖分)

    [BZOJ3653]谈笑风生(长链剖分) 题面 BZOJ 洛谷 权限题啊.... 题解 首先根据题目给的条件,发现\(a,b\)都要是\(c\)的父亲. 所以这三个点是树上的一条深度单增的链. 因为\ ...

  9. luogu P3899 [湖南集训]谈笑风生

    传送门 nmyzd,mgdhls,bnmbzdgdnlql,a,wgttxfs 对于一个点\(a\),点\(b\)只有可能是他的祖先或者在\(a\)子树里 如果点\(b\)是\(a\)祖先,那么答案为 ...

随机推荐

  1. javascript实现对html便签等字符的转义

    参考链接:https://www.jb51.net/article/152700.htm 请访问以上链接. 本人纯搬迁,防止原作者删除. <script> var HtmlUtil = { ...

  2. RPC之Jersey服务调用处理(一)

    1.定义:        远程过程调用, 也叫远程函数调用, 最早出现在Sun公司和HP公司的运行Unix操作系统的计算机中,用于系统间通信的一种机制.        RPC的基本通信模型是基于Cli ...

  3. Python处理PDF和Word文档常用的方法

    Python处理PDF和Word文档的模块是PyPDF2,使用之前需要先导入. 打开一个PDF文档的操作顺序是:用open()函数打开文件并用一个变量来接收,然后把变量给传递给PdfFileReade ...

  4. 第十一次ScrumMeeting博客

    第十一次ScrumMeeting博客 本次会议于11月29日(三)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...

  5. LeetCode 561. Array Partition I (C++)

    题目: Given an array of 2n integers, your task is to group these integers into npairs of integer, say ...

  6. Scrum Meeting 12 -2014.11.18

    今天的任务都比较顺利,测试暂时还没发现特别的问题. Member Today’s task Next task 林豪森 与其他小组商讨整合问题 与其他小组商讨整合问题 宋天舒 测试项目功能实现 测试项 ...

  7. 每日scrum(1)

    今天又正式开始了第二个冲刺周期,计划十天,主要需要改进的地方包括UI界面,还有一些细节的把握. 今天出现的主要问题有:在讨论UI界面风格的时候,小组内部意见不统一,对UI界面的创作流程不熟悉,以及难度 ...

  8. 每日Scrum(10)

    今天我们小组整合了下我们所编辑的程序,然后在界面上进行了修改和少部分的完善,现在就等着下午的验收了 任务展板 燃尽图如下:

  9. Alpha 冲刺报告(4/10)

    Alpha 冲刺报告(4/10) 队名:洛基小队 峻雄(组长) 已完成:继续行动脚本的编写 明日计划:尽量完成角色的移动 剩余任务:物品背包交互代码 困难:具体编码进展比较缓慢 ----------- ...

  10. 利用CNN进行多分类的文档分类

    # coding: utf-8 import tensorflow as tf class TCNNConfig(object): """CNN配置参数"&qu ...