题意:...

思路:

\(LCA\)乱搞+启发式合并(堆)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
const int maxm = maxn << 2;
int n,m;
int cnt;
int rt[maxn];
int head[maxn];
int dep[maxn];
int f[maxn][26];
vector<int>v[maxn];
struct edge {
int to;
int nxt;
}e[maxn << 1];
inline void add(int u,int v) {
e[++cnt].to = v;
e[cnt].nxt = head[u];
head[u] = cnt;
return;
}
struct node {
int l;
int r;
int sum;
}t[maxm]; inline int find_lca(int x,int y) {
if(dep[x] < dep[y]) swap(x,y);
int tmp = dep[x] - dep[y];
for(int i = 20;i >= 0; --i) {
if(tmp >> i & 1) {
x = f[x][i];
}
}
if(x == y) return x;
for(int i = 20; i >= 0; --i) {
if(f[x][i] != f[y][i]) {
x = f[x][i];
y = f[y][i];
}
}
return f[x][0];
}
//calc huan
inline void dfs1(int u,int fa) {
for(int i = 1;i <= 20; ++i) {
f[u][i] = f[f[u][i - 1]][i - 1];
}
for(int i = head[u];i;i=e[i].nxt) {
int y = e[i].to;
if(y != fa) {
f[y][0] = u;
dep[y] = dep[u] + 1;
dfs1(y,u);
}
}
}
int tot;
//dui inline void insert(int l,int r,int &now,int x) {
if(!now) {
now = ++tot;
t[now].sum ++;
}
if(l == r) return;
int mid = (l + r) >> 1;
if(x <= mid) {
insert(l,mid,t[now].l,x);
}
else insert(mid + 1,r,t[now].r,x);
} //duihebing
inline int merge(int x,int y) {
if(!x || !y) {
return x | y;
}
int now = ++tot;
t[now].l = merge(t[x].l,t[y].l);
t[now].r = merge(t[x].r,t[y].r);
t[now].sum = t[x].sum + t[y].sum;
return now;
} inline int query(int l,int r,int now,int x) {
if(l == r) return l;
int mid = (l + r) >> 1;
if(t[t[now].l].sum >= x) {
return query(l,mid,t[now].l,x);
}
else {
return query(mid + 1,r,t[now].r,x - t[t[now].l].sum);
}
} inline void dfs2(int x) {
for(int i = 0;i < v[x].size(); ++i) {
insert(1,n,rt[x],v[x][i]);
}
for(int i = head[x];i;i=e[i].nxt) {
int y = e[i].to;
if(y != f[x][0]) {
dfs2(y);
rt[x] = merge(rt[x],rt[y]);
}
}
}
int x,y,q;
#define pb(x) push_back(x)
int main () {
scanf("%d %d",&n,&m);
for(int i = 1;i < n; ++i) {
scanf("%d %d",&x,&y);
add(x,y);
add(y,x);
}
dep[1] = 1;
dfs1(1,0);
for(int i = 1;i <= m; ++i) {
scanf("%d %d",&x,&y);
int FF = find_lca(x,y);
v[x].pb(dep[FF]);
v[y].pb(dep[FF]);
}
dfs2(1);
scanf("%d",&q);
while(q--) {
scanf("%d %d",&x,&y);
int tmp = query(1,n,rt[x],y);
printf("%d\n",max(dep[x] - tmp,0));
}
return 0;
}

[Nowcoder] 保护的更多相关文章

  1. [nowcoder]contest/172/C保护

    C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi) ...

  2. Nowcoder 提高组练习赛-R1

    https://www.nowcoder.com/acm/contest/172#question 单人报名300元,五人合报免费,于是就和学弟同学学长们组了一个三世同堂的队伍,高一的学长wzhqwq ...

  3. nowcoder OI 周赛 最后的晚餐(dinner) 解题报告

    最后的晚餐(dinner) 链接: https://www.nowcoder.com/acm/contest/219/B 来源:牛客网 题目描述 \(\tt{**YZ}\)(已被和谐)的食堂实在是太挤 ...

  4. [牛客网NOIP赛前集训营-提高组(第一场)]C.保护

    链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...

  5. 为革命保护视力 --- 给 Visual Studio 换颜色

    “为革命,保护视力,预防近视,眼保健操开始......” 这个应该是最老版本的眼保健操了,你听过? 一堆废话 且不说上面这个眼保健操到底有木有用,让眼睛放松下还是很有必要的,尤其是现在天天对着不是手机 ...

  6. Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护

    CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚. 现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用.山坡网之前属于第一种情况,哈哈,所以至今没什么问题. ...

  7. 用JWT来保护我们的ASP.NET Core Web API

    在上一篇博客中,自己动手写了一个Middleware来处理API的授权验证,现在就采用另外一种方式来处理这个授权验证的问题,毕竟现在也 有不少开源的东西可以用,今天用的是JWT. 什么是JWT呢?JW ...

  8. IBatisNet -- 保护你的配置文件及映射文件信息

    通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的.然而 ...

  9. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

随机推荐

  1. CF 600E. Lomsat gelral(dsu on tree)

    解题思路 \(dsu\) \(on\) \(tree\)的模板题.暴力而优雅的算法,轻儿子的信息暴力清空,重儿子的信息保留,时间复杂度\(O(nlogn)\) 代码 #include<iostr ...

  2. (转)OpenFire源码学习之七:组(用户群)与花名册(用户好友)

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43413651 Group 在openfire中的gorop——组,也可以理解为共享组.什 ...

  3. C++语言编程基础

    C++程序设计语言可以看作C语言的改进和升级,不仅完全兼容了C语言的语法和函数库,还引入了面向对象.运算符重载.多态性.数据流和模板等最新的编程思想.极大地保证了源代码的生产率.质量和可重用性.GNU ...

  4. tp5使用jwt生成token,做api的用户认证

    首先 composer 安装  firebase/php-jwt github:https://github.com/firebase/php-jwt composer require firebas ...

  5. CSS:CSS 伪元素

    ylbtech-CSS:CSS 伪元素 1.返回顶部 1. CSS 伪元素 CSS伪元素是用来添加一些选择器的特殊效果. 语法 伪元素的语法: selector:pseudo-element {pro ...

  6. linux 服务器修改密码

    登录服务器后直接输入命令行passwd root 然后输入两次新密码就行

  7. 【牛客提高训练营2B】分糖果

    题目 发现自己一年之前非常垃圾 题目大意是给你一个\(n\)个点的环,给每个点一个\([1,a_i]\)的取值,并且满足环上任意相连两点权值不能相等,求方案数 考虑断环为链,发现不大会 不妨考虑所有\ ...

  8. DDOS到底是什么,怎么预防,看看就明白了

    可怕的DDOS怎么预防 分布式拒绝服务(DDoS: distributed denial-of-service)攻击是恶意破坏目标服务器.服务或网络的正常通信量的企图,其方法是用大量Internet通 ...

  9. 基于角色访问控制的OA系统的设计与实现

    摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ...

  10. pytest--fixture之参数化

    场景:测试用例执行时,有的用例需要登陆才能执行,有些用例 不需要登陆.setup和teardown无法满足.fixture可以.默认 scope(范围)function • 步骤: 1. 导入pyte ...