• 给一棵树,m次查询,每次查询给两个集合,从这两个集合中分别选一个结点,使得这两个结点的lca的深度最大
  • 考虑dfs序为3, 4, 5的三个结点,3和4的lca深度一定大于等于3和5的lca深度
  • 所以可以将查询集合按dfs序进行排序,然后双指针,使每一对dfs序接近的结点都做一次lca,取最深的即可。尺取的思想。
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>using namespace std;const int N = 1e5 + 10;int n, m;
vector<int> G[N];
int dep[N], id[N], fa[N], tot;
int up[N][21];
int s1[N], s2[N];void dfs(int from, int x)
{id[x] = tot ++ ;fa[x] = from;dep[x] = dep[from] + 1;for (int i = 0; i < (int)G[x].size(); i ++ )if (from != G[x][i])dfs(x, G[x][i]);return ;
}void init()
{for (int i = 1; i <= n; i ++ )  // 先跳0层up[i][0] = fa[i];for (int k = 1; k <= 20; k ++ )     // [1, 20]for (int i = 1; i <= n; i ++ )up[i][k] = up[up[i][k - 1]][k - 1];return ;
}bool cmp(int u, int v)
{return id[u] < id[v];
}int lca(int a, int b)
{if (dep[a] < dep[b]) swap(a, b);for (int k = 20; k >= 0; k -- )        // [20, 1]if (dep[up[a][k]] >= dep[b])a = up[a][k];if (a == b) return a;for (int k = 20; k >= 0; k -- )     // [20, 1]if (up[a][k] != up[b][k]){a = up[a][k];b = up[b][k];}return up[a][0];
}int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);while (cin >> n >> m){for (int i = 1; i <= n; i ++ ) G[i].clear(); // 清空tot = 0;  // 清空for (int i = 0; i < n - 1; i ++ ){int u, v;cin >> u >> v;G[u].push_back(v), G[v].push_back(u);}dfs(0, 1);    // dfs序,深度,父节点init();  // 发展up数组while (m -- ){int k1, k2;cin >> k1;for (int i = 0; i < k1; i ++ ) cin >> s1[i];cin >> k2;for (int i = 0; i < k2; i ++ ) cin >> s2[i];sort(s1, s1 + k1, cmp); // 按dfs序排序sort(s2, s2 + k2, cmp);int i = 0, j = 0, ans = 0;while (i < k1 && j < k2){ans = max(ans, dep[lca(s1[i], s2[j])]);  // 注意的深度depif (id[s1[i]] > id[s2[j]]) j ++ ;else i ++ ;// 如果第一个集合的点的dfs序大于第二个中的dfs序,则选第二个中的dfs序更大}cout << ans << endl;}}return 0;
}

Innumerable Ancestors 尺取 dfs序 lca相关推荐

  1. BZOJ2588 Count on a tree DFS序+LCA+值域主席树

    Count on a tree 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答 ...

  2. 牛客 - Colorful Tree(dfs序+LCA)

    题目链接:点击查看 题目大意:给出一棵 n 个节点构成的数,每个节点都有一个颜色,现在需要执行 m 次操作,每次操作分为如下两种类型: Q x:回答所有颜色为 x 的节点构成的连通子图含有的最少边数 ...

  3. CodeForces - 1328E Tree Queries(dfs序/LCA)

    题目链接:点击查看 题目大意:给出一棵以点 1 为根节点的树,接下来有 m 次询问,每次询问给出 k 个点,题目问我们能否找到一个点 u ,使得从根节点到点 u 的简单路径,到 k 个点的每个点的距离 ...

  4. A and B and Lecture Rooms CodeForces - 519E LCA+dfs序

    看到这个题的第一个思路就是就是统计以每一个点为根的所有节点个数,然后具体就分情况讨论一下即可. 因为刚刚学习了dfs序,这个题就用了dfs序来通过进出时间戳来相减表示其为根的子节点个数. 分情况 我们 ...

  5. POJ - 2763 Housewife Wind LCA+dfs序+线段树

    q次询问求两个点之间的距离,并且可以随时修改某条边的长度,最短距离可以用lca来求,但是树上维护每一个点到root的距离必须要用dfs序来记录时间戳,在dfs的时候顺便记录每一条边(u,v)对应的v节 ...

  6. LCA ---- E. Tree Queries[LCA或者dfs序的解法]

    题目链接 题目大意:就是给你一颗树,然后qqq次询问每次询问会给出kkk个点,要求你判断一下这些点是否在存在一条从1到某个点u的链使得这k个点都在这条链上或者距离这条链距离为1的位置上 解法1:dfs ...

  7. 部分和问题 (dfs搜索 尺取)

    部分和问题 给定整数a1, a2, a3, a4,  ..........   ,  an  ,判断是否可以从中取出若干个数,使得他们的和恰好为k  . 1  <= n <= 20 测试数 ...

  8. HDU - 6203 ping ping ping(LCA+dfs序+线段树)

    题目链接:点击查看 题目大意:给出一棵由n+1个节点组成的数,节点编号为0~n(这个无关紧要,预处理时所有节点以及n都自增1即可转换为正常的模型了),现在给出m组节点u和v,问若想让m组u和v都断开连 ...

  9. codeforces E. Jamie and Tree LCA+dfs序+线段树

    题解: 写起来还稍微有点麻烦. dfs序+线段树可以维护子树的整体修改和查询. 因此,这道题我们要往子树上靠. 我们首先从1号点进行dfs遍历,顺便求出点的dfs序和深度,然后我们采用倍增的思想,可以 ...

最新文章

  1. jq 请求本地的json_jQuery使用ajax读取本地json文件的案例
  2. 新年之际,最新摄影必备的无人机免费送10个给大家!
  3. Linux 的系统运行级别
  4. java date 减小时_java 获取本机当前时间并对小时任意加减
  5. 尽管苹果打死不认 但iCloud被破解是真的:媒体亲身验证
  6. Linux下安装MySQL5.6
  7. Pytorch模型层简单介绍
  8. ceph编译_Ceph编译安装教程
  9. 如何配置struts+hibernate,基本使用方法
  10. dp - 2016腾讯笔试 A
  11. 团队协作项目——SVN的使用
  12. Windows和Mac下获取(当前)进程内存占用
  13. php mysql cpu使用率_Mysql CPU占用高的问题解决方法小结
  14. 稀缺-我们是如何陷入贫穷与忙碌的 读后感
  15. rost反剽窃检测系统_如何使用免费查重检测网站?
  16. 汇编中add和inc的问题
  17. 织梦php 文章采集规则,采集规则的管理 --- 采集节点管理
  18. 中国省-市-县(区)三级城市数据(json和数组)
  19. 不羞涩社区图片爬取,我真的不是为了看小姐姐私照,从未这么渴望过知识!
  20. yaourt -S mysql_Yaourt 已死!在 Arch 上使用这些替代品

热门文章

  1. FD33里面的销售值不正确应该怎么办?
  2. SAP 中session和外部断点设置的区别
  3. SAP 库存物资收发存报表主要思路
  4. 凭证 90000000 保存(帐户确定出错)
  5. SAP快速找到定制配置
  6. SAP CO Report
  7. ALV中调用Excel, 丢掉前面的0问题解决
  8. 素质教育,是救命稻草,还是压垮教培机构的最后一根稻草
  9. 国产美瞳频获融资背后:“小”美瞳的“大”生意经?
  10. 新基建与新消费碰撞的时代,日日顺如何以场景物流重新定义物流服务?