我现在爱死树链剖分了

题目

具体分析的话在洛谷blog

这里只是想放一下改完之后的代码

多了一个son数组少了一个for

少了找size最大的儿子的for

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. using namespace std;
  6. const int N = ;
  7. int n, q, head[N], cnt, dad[N], top[N], size[N], deep[N], son[N];
  8. struct edge{
  9. int next, to;
  10. }e[N << ];
  11. int read() {
  12. int s = , w = ;
  13. char ch = getchar();
  14. while(!isdigit(ch)) {if(ch == '-') w = -;ch = getchar();}
  15. while(isdigit(ch)) {s = s * + ch - '';ch = getchar();}
  16. return s * w;
  17. }
  18. void add(int x, int y) {
  19. e[++cnt].next = head[x];
  20. e[cnt].to = y;
  21. head[x] = cnt;
  22. }
  23. void dfs(int now) {
  24. size[now] = ;
  25. deep[now] = deep[dad[now]] + ;
  26. for(int i = head[now]; i; i = e[i].next)
  27. if(e[i].to != dad[now]) {
  28. dad[e[i].to] = now, dfs(e[i].to), size[now] += size[e[i].to];
  29. if(size[e[i].to] > size[son[now]]) son[now] = e[i].to;
  30. }
  31. }
  32. void dfs1(int now) {
  33. if(!top[now]) top[now] = now;
  34. if(son[now]) top[son[now]] = top[now], dfs1(son[now]);
  35. for(int i = head[now]; i; i = e[i].next)
  36. if(e[i].to != dad[now] && e[i].to != son[now])
  37. dfs1(e[i].to);
  38. }
  39. int lca(int x, int y) {
  40. while(top[x] != top[y]) {
  41. if(deep[top[x]] < deep[top[y]]) swap(x, y);
  42. x = dad[top[x]];
  43. }
  44. return deep[x] > deep[y] ? y : x;
  45. }
  46. int main () {
  47. n = read();q = read();
  48. for(int i = , u, v; i < n; i++) {
  49. u = read();v = read();
  50. add(u, v), add(v, u);
  51. }
  52. dfs();
  53. dfs1();
  54. for(int i = , a, b, c, d; i <= q; i++) {
  55. a = read(), b = read(), c = read(), d = read();
  56. int fir = max(deep[lca(a, b)], deep[lca(c, d)]);
  57. int sec = max(max(deep[lca(a, c)], deep[lca(a, d)]), max(deep[lca(b, c)], deep[lca(b, d)]));
  58. if(sec >= fir) puts("Y");
  59. else puts("N");
  60. }
  61. return ;
  62. }

谢谢收看, 祝身体健康!

洛谷p3398仓鼠找suger题解的更多相关文章

  1. 洛谷 P3398 仓鼠找sugar 题解

    每日一题 day44 打卡 Analysis 首先有一个结论:先找 p1=(a,b),p2=(c,d) 的LCA的深度,在与(a,c),(a,d),(b,c),(b,d)中最深的LCA n的深度比较, ...

  2. 洛谷P3398 仓鼠找suger

    传送门啦 思路: 那么从 $ A $ 到 $ B $ 可以分解成 先从 $ A $ 到 $ X $ 再从 $ X $ 到 $ B $ ... 另一个同理 假设能相遇 那么 要么在 $ A $ 到 $ ...

  3. 洛谷 P3398 仓鼠找sugar 解题报告

    P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  4. 洛谷P3398 仓鼠找sugar [LCA]

    题目传送门 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  5. 洛谷P3398 仓鼠找sugar

    题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...

  6. 洛谷 P3398 仓鼠找sugar —— 树链剖分

    题目:https://www.luogu.org/problemnew/show/P3398 树链剖分一下,路径就变成线段树上的几个区间: 两条路径相交就是线段树上有区间相交,所以在相应位置打个标记, ...

  7. 洛谷——P3398 仓鼠找sugar

    https://www.luogu.org/problem/show?pid=3398#sub 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴 ...

  8. 洛谷 [P3398] 仓鼠找sugar

    树剖求LCA 我们可以发现,两条路径ab,cd相交,当且仅当 dep[lca(a,b)]>=dep[lca(c,d)]&(lca(lca(a,b),c)==lca(a,b)||lca(l ...

  9. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

随机推荐

  1. Linux图形界面从登录列表中隐藏用户和开机自动登录

    从GDM-GNOME显示管理器:“ GNOME显示管理器(GDM)是一个管理图形显示服务器并处理图形用户登录的程序.” 显示管理器为X Window System和Wayland用户提供图形登录提示. ...

  2. Ubuntu系统下容器化部署gitlab

    容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...

  3. Python网络编程、爬虫之requests模块使用

    一.python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块. urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib ...

  4. 看年薪50W的架构师如何手写一个SpringMVC框架

    前言 做 Java Web 开发的你,一定听说过SpringMVC的大名,作为现在运用最广泛的Java框架,它到目前为止依然保持着强大的活力和广泛的用户群. 本文介绍如何用eclipse一步一步搭建S ...

  5. mybatis关联映射多对多

    项目开发中,多对多关系也是非常常见的关系 在数据库中创建表的脚本 table.sql CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, ...

  6. 小tips:JS/CSS实现字符串单词首字母大写

    css实现: text-transform:capitalize; JS代码一: String.prototype.firstUpperCase = function(){ return this.r ...

  7. android黑白屏的问题

    你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...

  8. Kubernetes学习之基础概念

    本文章目录 kubernetes特性 kubernetes集群架构与组件 一.kubernetes集群架构 二.集群组件 三.ubernetes集群术语 深入理解Pod对象 一.Pod容器分类 基础容 ...

  9. Maven基础。

    ---恢复内容开始--- Maven: 1.概念. * maven 是一个项目管理工具. * maven的作用. 1.jar包.依赖管理.将jar包放在jar包仓库(pom.xml),不需要每个项目都 ...

  10. Vim 中进行文件目录操作

    Vim 中进行文件目录操作 当前文件名 我们知道Vim有48个寄存器,其中%只读寄存器中保存着当前文件路径. 例如在/home/harttle/下打开src/main.cpp,我们打印%的值: :ec ...