[Nowcoder] 保护
题意:...
思路:
\(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] 保护的更多相关文章
- [nowcoder]contest/172/C保护
C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi) ...
- Nowcoder 提高组练习赛-R1
https://www.nowcoder.com/acm/contest/172#question 单人报名300元,五人合报免费,于是就和学弟同学学长们组了一个三世同堂的队伍,高一的学长wzhqwq ...
- nowcoder OI 周赛 最后的晚餐(dinner) 解题报告
最后的晚餐(dinner) 链接: https://www.nowcoder.com/acm/contest/219/B 来源:牛客网 题目描述 \(\tt{**YZ}\)(已被和谐)的食堂实在是太挤 ...
- [牛客网NOIP赛前集训营-提高组(第一场)]C.保护
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...
- 为革命保护视力 --- 给 Visual Studio 换颜色
“为革命,保护视力,预防近视,眼保健操开始......” 这个应该是最老版本的眼保健操了,你听过? 一堆废话 且不说上面这个眼保健操到底有木有用,让眼睛放松下还是很有必要的,尤其是现在天天对着不是手机 ...
- Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护
CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚. 现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用.山坡网之前属于第一种情况,哈哈,所以至今没什么问题. ...
- 用JWT来保护我们的ASP.NET Core Web API
在上一篇博客中,自己动手写了一个Middleware来处理API的授权验证,现在就采用另外一种方式来处理这个授权验证的问题,毕竟现在也 有不少开源的东西可以用,今天用的是JWT. 什么是JWT呢?JW ...
- IBatisNet -- 保护你的配置文件及映射文件信息
通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的.然而 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
随机推荐
- 高性能js之js文件的加载与解析
随着网站的发展,现在的网页已经离不开js,经常一个页面会引入大量的js.那么该如何合理的加载这些js? head标签中引入js文件可能是最常见的一种方式,但是这样会造成一个问题.因为j可以说是浏览器中 ...
- Vue学习笔记【14】——自定义指令
1.自定义全局和局部(私有)自定义指令 // 自定义全局指令 v-focus,为绑定的元素自动获取焦点: Vue.directive('focus', { inserted: function ...
- bzoj 2561
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2561 考虑做mst的时候,什么时候这条边不在这棵mst上呢? 就是比他小的权值的边讲这条边的 ...
- PHP ftp_get_option() 函数
定义和用法 The ftp_get_option() 函数返回 FTP 连接的各种运行时选项. 语法 ftp_get_option(ftp_connection,option) 参数 描述 ftp_c ...
- ac自动机暴力跳fail匹配——hdu5880
很简单的题,ac自动机里再维护一个len表示每个状态的串长,用s去query时每到一个结点都要暴力跳fail,因为有可能这个结点不是,但是其fail是危险结点,找到一个就直接break 再用个差分数组 ...
- Linux环境下安装PHP的mbstring模块
cd /home/local/php-5.6.25/ext/mbstring/usr/local/php/bin/phpize./configure --with-php-config=/usr/lo ...
- CF232E Quick Tortoise , Fzoj 3118
这一题由于数据较多,我们考虑离线处理. 分治.对于两个点s,t,如果起点在mid这条横线上方,终点在下方,那么它必定会穿过mid这条线.所以只要s可以到mid上一点x,x可以到t,st就是安全的. 用 ...
- js-原生js触发器使用
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- gensim中TaggedDocument 怎么使用
我有两个目录,我想从中读取它们的文本文件并给它们贴上标签,但我不知道如何通过taggedDocument来实现这一点.我以为它可以作为标记文档([strings],[labels])工作,但这显然不起 ...
- 1.3 React 组件
1.3.1 React 组件介绍 在 React 中组件是第一元素,是 React 的基础,一个 React 应用就是基于 React 组件的组合而成.前面的 JSX 练习过后,大家应该对 React ...