洛谷

BZOJ

分析

任意两个点的最短距离一定经过它们的 \(LCA\) ,推广到三个点的情况,设这三个点分别是 \(x,y,z\) ,先求出 \(x, y\) 的 \(LCA\) 为 \(w\) ,最后的 \(pos\) 可能是在 \(w\) 和 \(z\) 的 \(LCA\) 处,但不难发现, \(w\) 是两个人在走,而 \(z\) 只有一个人,所以将 \(pos\) 放在 \(w\) 处显然会更合适。最后,手推样例发现三个 \(LCA\) 中取深度最大的 \(LCA\) 最合适。

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define il inline
#define re register
#define maxn 500003
#define tie0 cin.tie(0),cout.tie(0)
#define fastio ios::sync_with_stdio(false)
#define File(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
using namespace std;
typedef long long ll;template <typename T> inline void read(T &x) {T f = 1; x = 0; char c;for (c = getchar(); !isdigit(c); c = getchar()) if (c == '-') f = -1;for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);x *= f;
}struct edge {int to, nxt;
} e[maxn<<1];int n, m, pos, cost;
int head[maxn], cnt;
int fa[maxn][25], dep[maxn], lg[maxn];void addedge(int u, int v) {e[++cnt].to = v, e[cnt].nxt = head[u], head[u] = cnt;e[++cnt].to = u, e[cnt].nxt = head[v], head[v] = cnt;
}void dfs(int u, int _fa) {fa[u][0] = _fa, dep[u] = dep[_fa] + 1;for (int i = 1; (1 << i) <= dep[u]; ++i) fa[u][i] = fa[fa[u][i-1]][i-1];for (int i = head[u]; i; i = e[i].nxt) {int v = e[i].to;if (v == _fa) continue;dfs(v, u);}
}int LCA(int u, int v) {if (dep[u] < dep[v]) swap(u, v);while (dep[u] > dep[v]) u = fa[u][lg[dep[u]-dep[v]]-1];if (u == v) return u;for (int i = lg[dep[u]]; i >= 0; --i)if (fa[u][i] != fa[v][i])u = fa[u][i], v = fa[v][i];return fa[u][0];
}void solve(int x, int y, int z) {int f1, f2, f3;f1 = LCA(x, y), f2 = LCA(y, z), f3 = LCA(x, z);pos = dep[f1] > dep[f2] ? f1 : f2;pos = dep[pos] > dep[f3] ? pos : f3;cost = dep[x] + dep[y] + dep[z] - dep[f1] - dep[f2] - dep[f3];
}int main() {int u, v, w;read(n), read(m);for (int i = 1; i <= n; ++i) lg[i] = lg[i-1] + (1 << lg[i-1] == i);for (int i = 1; i < n; ++i) {read(u), read(v);addedge(u, v);}dfs(1, 0);for (int i = 1; i <= m; ++i) {cost = 0;read(u), read(v), read(w);solve(u, v, w);printf("%d %d\n", pos, cost);}return 0;
}

转载于:https://www.cnblogs.com/hlw1/p/11437298.html

AHOI2008 聚会相关推荐

  1. BZOJ1832: [AHOI2008]聚会

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1832 直接找三个点lca就可以了.这叫lca模版题. #include<cstring& ...

  2. [BZOJ1787][Ahoi2008]Meet 紧急集合[BZOJ1832][AHOI2008]聚会

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1787 http://www.lydsy.com/JudgeOnline/problem.ph ...

  3. bzoj 1787 bzoj 1832: [Ahoi2008]Meet 紧急集合(倍增LCA)

    1832: [AHOI2008]聚会 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1539  Solved: 663 [Submit][Status ...

  4. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  5. 《信息学奥赛一本通 提高篇》 第四部分 数据结构 第4章 倍增求LCA

    例题1 点的距离 信息学奥赛一本通(C++版)在线评测系统 例题2 暗的连锁(Poj3417) 信息学奥赛一本通(C++版)在线评测系统 LOj10131 暗的连锁_juruo_xlh-CSDN博客 ...

  6. P4281 [AHOI2008]紧急集合 / 聚会

    P4281 [AHOI2008]紧急集合 / 聚会 军训完.发现我自己连lca版都不会了 然后就强行写了这个题 然后卡了两天的原因就是计算距离写错了 #include<cstdio> #i ...

  7. 洛谷 P4281 [AHOI2008]紧急集合 / 聚会(树上倍增 LCA)

    [AHOI2008]紧急集合 / 聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有 n n n 个等待点,有 n − 1 n-1 n−1 条道路连接着它们 ...

  8. 洛谷· [AHOI2008]紧急集合 / 聚会

    初见安~这里是传送门:洛谷P4281紧急集合/聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个 ...

  9. 题解【[AHOI2008]紧急集合 / 聚会】

    简化版题目: 有一棵 N N N个节点的树,和 Q Q Q组询问 有三个人分别在点 x , y , z x,y,z x,y,z现在希望你找到一个点,使得 三个人到这个点的距离和最小. 题目分析 首先, ...

最新文章

  1. React + Typescript + Webpack 开发环境配置
  2. ASP.NET %%,%=%,%#%区别
  3. 专门用来显示大量数据的视图:AdapterView(1)
  4. cocos2dx scrollview和controlslider关联
  5. 做生意成败难料,你见过亏损最惨的人有多惨呢?
  6. 常用30种MySQL查询语句优化方法
  7. 使用python实现对于chineseocr的API调用
  8. c#copyto_String.CopyTo()方法以及C#中的示例
  9. Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作
  10. 【亲测有效】装了双系统后在ubuntu下耳机没有声音的解决方法
  11. html标签属性值拼接,js拼接url以及为html某标签属性赋值
  12. oracle with as用法_关于Oracle with语句用法说明
  13. 数码相片冲印尺寸对照表
  14. 解决Unable to find taglib [cr] for URI: [WBE-INF/tlds/testlib.tld]] with root cause的可能性方案
  15. mac安装绿联USB转以太网驱动
  16. 数学分析教程(科大)——3.5笔记+习题
  17. Kafka容错性测试
  18. 明翰英语教学系列之句法篇V0.6(持续更新)
  19. 小程序如何写一个优美的tab选项卡
  20. 微信 html5 声音,Html5-video ,播放视频有声音无画面(微信H5页面)

热门文章

  1. Go 学习笔记(79)— Go 标准库 net(获取本机IP地址)
  2. Ubuntu 安装 ffmpeg
  3. 认清自己,愉快度过每一天
  4. xshell问题汇总
  5. LeetCode中等题之最简分数
  6. LeetCode简单题之比赛中的配对次数
  7. 端到端TVM编译器(下)
  8. TensorFlow常用Python扩展包
  9. 不是都需要ARM吗?
  10. 车载网络处理器带来多功能能力