牛客网9.9比赛 C 保护
题目大意:
n个城市构成一个树 m支军队 每只军队守卫 在xi到yi的最短路径上的城市
q个重要人物从vi出发 找到离根最近的点使从vi到这个点上所有路径都可以被至少ki个军队完全覆盖
输出每个答案的点的深度
思路:
对于每个军队 可以拆成两个链
在深度较大的节点的权值线段树上把深度较低的点+1
然后合并线段树
查询的时候查询子树线段树中第k小的
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#define inf 2139062143
#define ll long long
#define MAXN 200100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,f[MAXN][],dep[MAXN],hsh[MAXN],sz[MAXN],val[MAXN<<];
int nxt[MAXN<<],fst[MAXN],to[MAXN<<],cnt,rt[MAXN],ls[MAXN<<],rs[MAXN<<];
void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v;}
void dfs(int x)
{
hsh[x]=++cnt,sz[x]=;
for(int i=;(<<i)<=dep[x];i++) f[x][i]=f[f[x][i-]][i-];
for(int i=fst[x];i;i=nxt[i])
if(to[i]!=f[x][]){dep[to[i]]=dep[x]+,f[to[i]][]=x;dfs(to[i]);sz[x]+=sz[to[i]];}
}
int lca(int u,int v)
{
if(dep[u]<dep[v]) swap(u,v);
int t=dep[u]-dep[v];
for(int i=;i<=;i++)
if((<<i)&t) u=f[u][i];
if(u==v) return u;
for(int i=;i>=;i--)
if(f[u][i]!=f[v][i]) u=f[u][i],v=f[v][i];
return f[u][];
}
void inst(int &k,int l,int r,int x)
{
if(!k) k=++cnt;
val[k]++;
if(l==r) return ;
int mid=(l+r)>>;
if(x<=mid) inst(ls[k],l,mid,x);
else inst(rs[k],mid+,r,x);
}
void merge(int &a,int b)
{
if(!a) {a=b;return ;}
if(!b) return ;
val[a]+=val[b];
merge(ls[a],ls[b]);
merge(rs[a],rs[b]);
}
int query(int k1,int k2,int l,int r,int a,int b)
{
if(!k1) return ;
if(l==a&&r==b) return val[k1]-val[k2];
int mid=(l+r)>>;
if(b<=mid) return query(ls[k1],ls[k2],l,mid,a,b);
else if(a>mid) return query(rs[k1],rs[k2],mid+,r,a,b);
else return query(ls[k1],ls[k2],l,mid,a,mid)+query(rs[k1],rs[k2],mid+,r,mid+,b);
}
int ans(int k1,int k2,int l,int r,int x)
{
//cout<<l<<" "<<r<<" "<<val[k1]-val[k2]<<" "<<x<<endl;
if(l==r) return l;
int mid=(l+r)>>;
if(x<=val[ls[k1]]-val[ls[k2]]) return ans(ls[k1],ls[k2],l,mid,x);
else return ans(rs[k1],rs[k2],mid+,r,x-val[ls[k1]]+val[ls[k2]]);
}
int main()
{
n=read(),m=read();int a,b,c;
for(int i=;i<n;i++) {a=read(),b=read();add(a,b);add(b,a);}
cnt=;dfs();cnt=;
while(m--)
{
a=read(),b=read(),c=lca(a,b);
inst(rt[hsh[a]],,n,dep[c]+);
inst(rt[hsh[b]],,n,dep[c]+);
}
for(int i=;i<=n;i++) merge(rt[i],rt[i-]);
m=read();
while(m--)
{
a=read(),b=read();
//cout<<query(rt[hsh[a]+sz[a]-1],rt[hsh[a]-1],1,n,1,dep[a]+1)<<endl;
if(query(rt[hsh[a]+sz[a]-],rt[hsh[a]-],,n,,dep[a]+)<b) puts("");
else printf("%d\n",dep[a]+-ans(rt[hsh[a]+sz[a]-],rt[hsh[a]-],,n,b));
}
}
牛客网9.9比赛 C 保护的更多相关文章
- [牛客网NOIP赛前集训营-提高组(第一场)]C.保护
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...
- 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)
链接:https://www.nowcoder.com/acm/contest/197/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客网NOIP赛前集训营-提高组(第一场)
牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...
- 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)
前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...
- 2018年牛客网NOIP赛前训练营游记
2018年牛客网NOIP赛前训练营游记 提高组(第一场) 中位数 #include<cstdio> #include<cctype> #include<climits&g ...
- 牛客网——E进阶吧阶乘
链接:https://www.nowcoder.net/acm/contest/75/E来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网 牛客练习赛43 C.Tachibana Kanade Loves Review-最小生成树(并查集+Kruskal)+建虚点+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 Tachibana Kanade Loves Review 时间限制:C/C++ 2秒,其他语言4 ...
- 牛客网 Wannafly挑战赛27 蓝魔法师
蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...
随机推荐
- Django的admin源码浅析和模仿
admin模块: admin提供了5种接口 list_display, 指定数据展示字段,不能放多对多字段
- 84-Market Facilitation Index 市场促进指数指标.(2015.7.3)
Market Facilitation Index 市场促进指数指标 MFI指标的计算方式为: MFI=High(最高价)-Low(最低价))/ Volume(成交量) MFI上升,成交量上升,表示价 ...
- java 编码乱码问题
Tomcat的server.xml 文件Connector标签加上URIEncoding="utf-8": <Connector port=" protocol=& ...
- npm 发包
前几天封装了公用的locaStorage组件,当然封装后需要发布npm官网,于是摸索了一番终于搞定了,总结下来希望对大家有所帮助 npm安装的package一般支持下面几大类: 本地包 url远程包 ...
- java连接mysql数据库中文乱码问题
private static final String URL="jdbc:mysql://localhost:3306/ziye?useUnicode=true&character ...
- 视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的差异
http://blog.csdn.net/leshami/article/details/8658205 视图v$sql,v$sqlarea,v$sqltext,v$sqltext_with_newl ...
- 概率dp呜呜
概率dp有环怎么办? 答案可劲迭代 ,然后可劲消元 , 怎么消? 我就不知道了. 呵呵
- Java高概率面试题目—finally
在Java面试中关于finally的面试题目出现的概率非常高,而且一旦面试官问起绝不会是蜻蜓点水,而是会向你发起层层递进地“连环问”,并且回答这系列问题常常需要代码的辅助,可谓考验基础的面试利题.究竟 ...
- Git push时报错 ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to......
今天在使用Git回退到之前某个版本的代码时,进行push时出现如下错误: ! [remote rejected] master -> master (pre-receive hook decli ...
- ETL增量单表同步简述_根据dateTime增量
ETL增量单表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 步骤简单说明: 1.设置job的执行属性,如 ...