题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1832


省选出出了CF的感觉.....

显然一发贪心,如果两个点显然就是他们的$LCA$(不在一条链上的情况),第三个点不就直接走到这个$LCA$么,考虑$3$种分别组合的情况即可。


 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 500100
#define llg int
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,f[maxn][],deep[maxn];
vector<llg>a[maxn]; void dfs(llg x,llg fa)
{
llg w=a[x].size(),v;
deep[x]=deep[fa]+,f[x][]=fa;
for (llg i=;i<w;i++)
{
v=a[x][i];
if (v==fa) continue;
dfs(v,x);
}
} void make_f()
{
for (llg j=;j<=;j++)
for (llg i=;i<=n;i++)
f[i][j]=f[f[i][j-]][j-];
} llg find(llg x,llg y)
{
if (deep[x]<deep[y]) swap(x,y);
for (llg i=;i>=;i--)
if (deep[f[x][i]]>=deep[y])
x=f[x][i];
if (x==y) return x;
for (llg i=;i>=;i--)
if (f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][];
} void init()
{
llg x,y;
cin>>n>>m;
for (llg i=;i<n;i++)
{
scanf("%d%d",&x,&y);
a[x].push_back(y),a[y].push_back(x);
}
dfs(,);
make_f();
} llg dis(llg x,llg y){return deep[x]+deep[y]-deep[find(x,y)]*;} int main()
{
yyj("bzoj1832");
init();
llg x,y,z,val,po,ans;
while (m--)
{
ans=0x7fffffff;
scanf("%d%d%d",&x,&y,&z); val=dis(x,y)+dis(find(x,y),z);
if (val<ans) {ans=val,po=find(x,y);} val=dis(z,y)+dis(find(z,y),x);
if (val<ans) {ans=val,po=find(z,y);} val=dis(x,z)+dis(find(x,z),y);
if (val<ans) {ans=val,po=find(x,z);} printf("%d %d\n",po,ans);
}
return ;
}

【BZOJ】1832: [AHOI2008]聚会的更多相关文章

  1. BZOJ 1832: [AHOI2008]聚会( LCA )

    LCA模板题...不难发现一定是在某2个人的LCA处集合是最优的, 然后就3个LCA取个最小值就OK了. 距离就用深度去减一减就可以了. 时间复杂度O(N+MlogN) (树链剖分) -------- ...

  2. bzoj 1832: [AHOI2008]聚会

    良心题2333 三个点两两求一遍就行,最小肯定是在某2个点的lca处,(肯定让第三个人去找2个人,不能让2个人一起去找第三个人233) #include<bits/stdc++.h> #d ...

  3. bzoj 1787 [Ahoi2008]Meet 紧急集合(1832 [AHOI2008]聚会)

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1841  Solved: 857[Submit][ ...

  4. bzoj 1787 && bzoj 1832: [Ahoi2008]Meet 紧急集合(倍增LCA)算法竞赛进阶指南

    题目描述 原题连接 Y岛风景美丽宜人,气候温和,物产丰富. Y岛上有N个城市(编号\(1,2,-,N\)),有\(N-1\)条城市间的道路连接着它们. 每一条道路都连接某两个城市. 幸运的是,小可可通 ...

  5. bzoj1832: [AHOI2008]聚会

    写过的题... #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  6. bzoj 1832 lca

    1832: [AHOI2008]聚会 Time Limit: 10 Sec  Memory Limit: 64 MB Description Y岛风景美丽宜人,气候温和,物产丰富.Y岛上有N个城市,有 ...

  7. BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地

    BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地 题目传送门 [题目大意] 游戏的主办方把这块开阔地当作第一象限,将所有可能埋藏宝藏的地方划成一个个矩形的土地,并把这些矩形土地 ...

  8. bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会

    bzoj1787[Ahoi2008]Meet 紧急集合 bzoj1832[AHOI2008]聚会 题意: 给个树,每次给三个点,求与这三个点距离最小的点. 题解: 倍增求出两两之间的LCA后,比较容易 ...

  9. BZOJ 1832、1787 洛谷 4281 [AHOI2008]紧急集合

    [题解] 题目要求找到一个集合点,使3个给定的点到这个集合点的距离和最小,输出集合点的编号以及距离. 设三个点为A,B,C:那么我们可以得到Dis=dep[A]+dep[B]+dep[C]-dep[L ...

随机推荐

  1. 介绍python中运算符优先级

    下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合).这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符. ...

  2. CentOS下shell显示-bash-4.1$不显示用户名路径

    Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法. 问题描述: CentOS下新增一个用户,登录进去之后shell脚本的信息如下: -bash-4.1$ \ -b ...

  3. Deeplearning 两层cnn卷积网络详解

    https://blog.csdn.net/u013203733/article/details/79074452 转载地址: https://www.cnblogs.com/sunshineatno ...

  4. lnmp vhost 文件

    server { listen 80 default_server; #listen [::]:80 default_server ipv6only=on; server_name blog.yang ...

  5. win10常见问题处理办法

    1.当笔记本连接wifi时,提示,无internet,安全,而手机能正常连接wifi时: cmd(需管理员权限)执行命令 netsh winsock reset 出现已重置,重启电脑 解决方法 2.当 ...

  6. Vue小案例 之 商品管理------批量删除与商品数量的调整

    通过索引进行删除,进行测试,是否获取其索引: 测试效果: 测试代码,在vue中定义一个空的数组,以便后面进行数据的绑定: data:{ imgUrl:'../res/images/', imgName ...

  7. CSM与UEFI

    最近公司产品部购置一批新电脑,但是预装的win10不能保证兼容老平台软件,于是安装win7系统的任务就落到了我的手中. 观察参数,是8代的U,产品说运维说无能为力,装不了win7.我在网上搜了一下,是 ...

  8. "添加与删除程序"报rundll32错误

    无法启动"添加与删除程序"系统报rundll32错误 系统反馈以下信息: rundll32.exe应用程序错误"0x00310030"指令 解决方法: 1.启动 ...

  9. mysql 水平分表技术

    这里做的是我的一个笔记. 水平分表比较简单, 理解就是: 合并的表使用的必须是MyISAM引擎 表的结构必须一致,包括索引.字段类型.引擎和字符集 数据表 user1 CREATE TABLE `us ...

  10. opencv学习之路(15)、形态学其他操作(开、闭、顶帽、黑帽、形态学梯度)

    一.形态学其他操作(用的不多,如果忘了也可以通过膨胀腐蚀得到相同效果) 1.开运算 2.闭运算 3.形态学梯度 4.顶帽 5.黑帽 #include "opencv2/opencv.hpp& ...