题意:...

思路:

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

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 200010;
  4. const int maxm = maxn << 2;
  5. int n,m;
  6. int cnt;
  7. int rt[maxn];
  8. int head[maxn];
  9. int dep[maxn];
  10. int f[maxn][26];
  11. vector<int>v[maxn];
  12. struct edge {
  13. int to;
  14. int nxt;
  15. }e[maxn << 1];
  16. inline void add(int u,int v) {
  17. e[++cnt].to = v;
  18. e[cnt].nxt = head[u];
  19. head[u] = cnt;
  20. return;
  21. }
  22. struct node {
  23. int l;
  24. int r;
  25. int sum;
  26. }t[maxm];
  27. inline int find_lca(int x,int y) {
  28. if(dep[x] < dep[y]) swap(x,y);
  29. int tmp = dep[x] - dep[y];
  30. for(int i = 20;i >= 0; --i) {
  31. if(tmp >> i & 1) {
  32. x = f[x][i];
  33. }
  34. }
  35. if(x == y) return x;
  36. for(int i = 20; i >= 0; --i) {
  37. if(f[x][i] != f[y][i]) {
  38. x = f[x][i];
  39. y = f[y][i];
  40. }
  41. }
  42. return f[x][0];
  43. }
  44. //calc huan
  45. inline void dfs1(int u,int fa) {
  46. for(int i = 1;i <= 20; ++i) {
  47. f[u][i] = f[f[u][i - 1]][i - 1];
  48. }
  49. for(int i = head[u];i;i=e[i].nxt) {
  50. int y = e[i].to;
  51. if(y != fa) {
  52. f[y][0] = u;
  53. dep[y] = dep[u] + 1;
  54. dfs1(y,u);
  55. }
  56. }
  57. }
  58. int tot;
  59. //dui
  60. inline void insert(int l,int r,int &now,int x) {
  61. if(!now) {
  62. now = ++tot;
  63. t[now].sum ++;
  64. }
  65. if(l == r) return;
  66. int mid = (l + r) >> 1;
  67. if(x <= mid) {
  68. insert(l,mid,t[now].l,x);
  69. }
  70. else insert(mid + 1,r,t[now].r,x);
  71. }
  72. //duihebing
  73. inline int merge(int x,int y) {
  74. if(!x || !y) {
  75. return x | y;
  76. }
  77. int now = ++tot;
  78. t[now].l = merge(t[x].l,t[y].l);
  79. t[now].r = merge(t[x].r,t[y].r);
  80. t[now].sum = t[x].sum + t[y].sum;
  81. return now;
  82. }
  83. inline int query(int l,int r,int now,int x) {
  84. if(l == r) return l;
  85. int mid = (l + r) >> 1;
  86. if(t[t[now].l].sum >= x) {
  87. return query(l,mid,t[now].l,x);
  88. }
  89. else {
  90. return query(mid + 1,r,t[now].r,x - t[t[now].l].sum);
  91. }
  92. }
  93. inline void dfs2(int x) {
  94. for(int i = 0;i < v[x].size(); ++i) {
  95. insert(1,n,rt[x],v[x][i]);
  96. }
  97. for(int i = head[x];i;i=e[i].nxt) {
  98. int y = e[i].to;
  99. if(y != f[x][0]) {
  100. dfs2(y);
  101. rt[x] = merge(rt[x],rt[y]);
  102. }
  103. }
  104. }
  105. int x,y,q;
  106. #define pb(x) push_back(x)
  107. int main () {
  108. scanf("%d %d",&n,&m);
  109. for(int i = 1;i < n; ++i) {
  110. scanf("%d %d",&x,&y);
  111. add(x,y);
  112. add(y,x);
  113. }
  114. dep[1] = 1;
  115. dfs1(1,0);
  116. for(int i = 1;i <= m; ++i) {
  117. scanf("%d %d",&x,&y);
  118. int FF = find_lca(x,y);
  119. v[x].pb(dep[FF]);
  120. v[y].pb(dep[FF]);
  121. }
  122. dfs2(1);
  123. scanf("%d",&q);
  124. while(q--) {
  125. scanf("%d %d",&x,&y);
  126. int tmp = query(1,n,rt[x],y);
  127. printf("%d\n",max(dep[x] - tmp,0));
  128. }
  129. return 0;
  130. }

[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. Shiro学习(23)多项目集中权限管理

    在做一些企业内部项目时或一些互联网后台时:可能会涉及到集中权限管理,统一进行多项目的权限管理:另外也需要统一的会话管理,即实现单点身份认证和授权控制. 学习本章之前,请务必先学习<第十章 会话管 ...

  2. Shiro学习(14)SSL

    对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\localhost.keystore 使用JDK的keyt ...

  3. NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

    NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...

  4. 文件下载java代码

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  5. nginx502问题

    常见的502错误1.配置错误因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port 2.资源耗尽lnmp架构在处 ...

  6. 前端(十四)—— JavaScript常用类:Number、Date类、字符串、数组、Math类、正则

    JS常用类:Number类.Date类.Math类.字符串.数组.正则 一.Number 1.常用数字 整数:10 小数:3.14 科学计数法:1e5 | 1e-5 正负无穷:Infinity | - ...

  7. centos7.5下生成公钥,实现ssh免密钥登陆

    配置SSH无密码登录需要4步准备工作生成公钥和私钥导入公钥到认证文件,更改权限测试1. 准备工作确认本机sshd的配置文件(需要root权限) # vi /etc/ssh/sshd_config 1找 ...

  8. nfs下的exportfs命令和nfs客户端重新挂载

    工作中,如果使用了nfs服务器,会遇到修改nfs服务器配置的情况,如果想重新让客户端加载上修改后的配置,但是又不能重启rpcbind服务,我们需要使用export命令了 exportfs命令 常用选项 ...

  9. mysql高效导入导出load data [infile][outfile]用法

    一.MySQL高效导入数据的方法load data infile load data infile语句从一个文本文件中以很高的速度读入一个表中.使用这个命令之前,mysqld进程(服务)必须已经在运行 ...

  10. AVR446步进电机算法推导及应用

    https://blog.csdn.net/Renjiankun/article/details/80513839?utm_source=copy