[USACO12DEC]逃跑的BarnRunning Away From…
题意
给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个
题解
似乎有好多种做法啊……然而蒟蒻只会打打主席树的板子……
调了一个上午一直WA……狠下心来重打一遍居然直接一遍过……
先dfs一遍,把到根节点的距离算出来,然后建出树上的主席树
然后考虑,$d[v]-d[u]<=L$,$d[v]<=L+d[u]$
然后就是对于每一个$d[u]+L$查询一下区间内有多少比它小的就好
细节问题:因为不能保证$d[u]+L$在离散化后的数组内存在,所以要用upper_bound,并查询比它小的,而且要在离散化的数组后面加一个inf
//minamoto
#include<bits/stdc++.h>
#define N 200005
#define M 4000005
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline ll read(){
#define num ch-'0'
char ch;bool flag=;ll res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char obuf[<<],*o=obuf;
void print(int x){
if(x>) print(x/);
*o++=x%+;
}
int sum[M],L[M],R[M],rt[N];
int ver[N<<],Next[N<<],head[N];ll edge[N<<];
int ls[N],rs[N];ll a[N],b[N];
int n,m,cnt,tot;ll p;
void update(int last,int &now,int l,int r,int x){
sum[now=++cnt]=sum[last]+;
if(l==r) return;
int mid=(l+r)>>;
if(x<=mid) R[now]=R[last],update(L[last],L[now],l,mid,x);
else L[now]=L[last],update(R[last],R[now],mid+,r,x);
}
int query(int u,int v,int l,int r,int k){
if(r<k) return sum[v]-sum[u];
if(l>=k) return ;
int mid=(l+r)>>;
if(k<=mid) return query(L[u],L[v],l,mid,k);
else return query(R[u],R[v],mid+,r,k)+sum[L[v]]-sum[L[u]];
}
inline void add(int u,int v,ll e){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
}
void dfs(int u,int fa,ll d){
b[ls[u]=++m]=d,a[m]=d;
for(int i=head[u];i;i=Next[i])
if(ver[i]!=fa) dfs(ver[i],u,d+edge[i]);
rs[u]=m;
}
int main(){
n=read(),p=read();
for(int u=;u<=n;++u){
int v=read();ll e=read();
add(v,u,e);
}
dfs(,,);
sort(b+,b++m);
m=unique(b+,b++m)-b-;
for(int i=;i<=n;++i){
int k=lower_bound(b+,b++m,a[i])-b;
update(rt[i-],rt[i],,m,k);
}
b[m+]=inf;
for(int i=;i<=n;++i){
int k=upper_bound(b+,b++m,a[ls[i]]+p)-b;
k=query(rt[ls[i]-],rt[rs[i]],,m,k);
print(k);
*o++='\n';
}
fwrite(obuf,o-obuf,,stdout);
return ;
}
[USACO12DEC]逃跑的BarnRunning Away From…的更多相关文章
- [USACO12DEC] 逃跑的BarnRunning Away From…(主席树)
[USACO12DEC]逃跑的BarnRunning Away From- 题目描述 It's milking time at Farmer John's farm, but the cows hav ...
- luoguP3066 [USACO12DEC]逃跑的BarnRunning
luoguP3066 [USACO12DEC]逃跑的BarnRunning 题目大意 给定一棵n个节点的树和参数L,查询每个节点子树中到达该节点距离<=L的数量(包括该节点) 偏模板的主席树 P ...
- [Luogu3066][USACO12DEC]逃跑的BarnRunning Away From…
题面 题目描述 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 输入格式: Line 1: 2 integers, N and L (1 <= N <= 2 ...
- 洛谷P3066 [USACO12DEC]逃跑的BarnRunning Away From…
题面链接 一句话题意:给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 我:似乎并不好做啊...看了题解后大雾... sol:考虑树上差分,对于一个点,在他那个位置++, ...
- P3066 [USACO12DEC]逃跑的BarnRunning Away From
目录 题目 思路 错误&&注意 代码 题目 luoguP3066 思路 虽说这个题目有多种做法,但 左偏树算法: 我们发现这个合并的时候并不好合并,因为存的值不是固定的 那我们是不是可 ...
- Luogu 3066 [USACO12DEC]逃跑的BarnRunning Away From…
好像是某CF的题,不记得…… 很套路的题,但是觉得可以做一下笔记. 倍增 + 差分. 有一个比较简单的思路就是每一个点$x$向上走一走,直到走到一个点$y$使总路程恰好不超过超过了$L$,然后把$(x ...
- P3066 [USACO12DEC]逃跑的BarnRunning Away From (树上二分)
题意 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 树上二分.这个做法还是基于树上差分的,也就是对于每一个点uu,我们要找到它向上跳LL的长度最高能够跳到的祖先.(当 ...
- P3066 [USACO12DEC]逃跑的BarnRunning Away From… 树上差分_树上倍增
code: #include <cstdio> using namespace std; #define ll long long const int N=200005; int n,fa ...
- 洛谷$P$3066 逃跑的$BarnRunning\ Away\ From…$ $[USACO12DEC]$ 主席树
正解:主席树 解题报告: 传送门! 1551做$dp$实在是做不下去了,,,于是来水点儿别的题$QAQ$ 然后这题,挺纸老虎的我$jio$得,,,看起来很难的样子然后仔细想下之后发现依然是个板子呢,, ...
随机推荐
- 树莓派上使用DHCPig进行DHCP池耗尽攻击
安装DHCPig 这个工具依赖Python的Scapy包,如果未安装需要使用pip工具安装. wget https://github.com/kamorin/DHCPig/raw/master/pig ...
- oh-my-zsh的安装与基本配置
1. 准备工作 安装需要用到:wget curl git zsh 官网:http://ohmyz.sh/ GitHub主页:https://github.com/robbyrussell/oh-my- ...
- 关于promise的一些用法
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise对象有以下两个特点 ...
- css实现单选效果,看看有趣的tabIndex
以前我实现单选变色几乎都是用js实现的,今天看到有个css属性可以直接实现单选变色,很开心啊~ 话不多说看效果 实现的代码如下 下面我们看看用focus实现别的有趣的效果 话不多说看效果 实现的代码如 ...
- double
看double精度 和 数字经过计算后的最小精度
- java用poi读取Excel表格中的数据
Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...
- MFC中运行出现问题“不支持尝试执行的操作”
http://blog.csdn.net/maturn/article/details/8051987 问题描述: 基于CDialogEx的对话框工程.VS2010开发环境. 调试运行到OnInitD ...
- Oracle记录-开启与关闭数据库
1.配置tnsnames.ora/listener.ora #cd /usr/oracle/oracle/product/11.2.0/db_1/network/admin ---切换到安装目录 #v ...
- 破解excel密码保护【转】
破解excel密码保护 录制一个新宏.内容如下.保存后运行,点几次确定,过一分钟还会再弹出来,再点确定,然后就好了. Public Sub AllInternalPasswords() ' Break ...
- Study 2 —— 图片热点区域
标记<map>和<area><img src="图片" usemap="#名称"><map id="#名称& ...