bzoj 1832: [AHOI2008]聚会
良心题2333
三个点两两求一遍就行,最小肯定是在某2个点的lca处,(肯定让第三个人去找2个人,不能让2个人一起去找第三个人233)
#include<bits/stdc++.h>
#define N 500005
#define M 10000005
#define LL long long
#define inf 0x3f3f3f3f
using namespace std;
inline int ra()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
struct node{
int to,next;
}e[N<<];
int head[N],cnt;
int fa[N][],deep[N],n,m;
void insert(int x, int y){e[++cnt].to=y; e[cnt].next=head[x]; head[x]=cnt;}
void dfs(int x)
{
for (int i=; i<=; i++)
if (deep[x]>=(<<i))
fa[x][i]=fa[fa[x][i-]][i-];
else break;
for (int i=head[x];i;i=e[i].next)
{
if (e[i].to==fa[x][]) continue;
fa[e[i].to][]=x;
deep[e[i].to]=deep[x]+;
dfs(e[i].to);
}
}
int lca(int x, int y)
{
if (deep[x]<deep[y]) swap(x,y);
int t=deep[x]-deep[y];
for (int i=; (<<i)<=t ; i++)
if (t&(<<i)) x=fa[x][i];
for (int i=; i>=; i--)
if (fa[x][i]!=fa[y][i])
x=fa[x][i],y=fa[y][i];
if (x==y) return x;
return fa[x][];
}
int lca_cost(int x, int y)
{
int sum=;
if (deep[x]<deep[y]) swap(x,y);
int t=deep[x]-deep[y];
for (int i=; (<<i)<=t ; i++)
if (t&(<<i)) x=fa[x][i],sum+=(<<i);
for (int i=; i>=; i--)
if (fa[x][i]!=fa[y][i])
x=fa[x][i],y=fa[y][i],sum+=(<<i)*;
if (x==y) return sum;
return sum+;
}
int main()
{
n=ra(); m=ra();
for (int i=; i<n; i++)
{
int x=ra(),y=ra();
insert(x,y); insert(y,x);
}
dfs();
for (int i=; i<=m; i++)
{
int x=ra(),y=ra(),z=ra();
int ans1=lca_cost(x,y)+lca_cost(lca(x,y),z);
int ans2=lca_cost(x,z)+lca_cost(lca(x,z),y);
int ans3=lca_cost(y,z)+lca_cost(lca(y,z),x);
int ans=min(min(ans1,ans2),ans3);
if (ans==ans1) printf("%d ",lca(x,y));
else if (ans==ans2) printf("%d ",lca(x,z));
else if (ans==ans3) printf("%d ",lca(y,z));
printf("%d\n",ans);
}
}
bzoj 1832: [AHOI2008]聚会的更多相关文章
- BZOJ 1832: [AHOI2008]聚会( LCA )
		LCA模板题...不难发现一定是在某2个人的LCA处集合是最优的, 然后就3个LCA取个最小值就OK了. 距离就用深度去减一减就可以了. 时间复杂度O(N+MlogN) (树链剖分) -------- ... 
- bzoj 1787 [Ahoi2008]Meet 紧急集合(1832 [AHOI2008]聚会)
		1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1841 Solved: 857[Submit][ ... 
- 【BZOJ】1832: [AHOI2008]聚会
		题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1832 省选出出了CF的感觉..... 显然一发贪心,如果两个点显然就是他们的$LCA$(不 ... 
- bzoj 1787 && bzoj 1832: [Ahoi2008]Meet 紧急集合(倍增LCA)算法竞赛进阶指南
		题目描述 原题连接 Y岛风景美丽宜人,气候温和,物产丰富. Y岛上有N个城市(编号\(1,2,-,N\)),有\(N-1\)条城市间的道路连接着它们. 每一条道路都连接某两个城市. 幸运的是,小可可通 ... 
- bzoj1832: [AHOI2008]聚会
		写过的题... #include<cstdio> #include<cstring> #include<iostream> #include<algorith ... 
- bzoj 1832 lca
		1832: [AHOI2008]聚会 Time Limit: 10 Sec Memory Limit: 64 MB Description Y岛风景美丽宜人,气候温和,物产丰富.Y岛上有N个城市,有 ... 
- BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地
		BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地 题目传送门 [题目大意] 游戏的主办方把这块开阔地当作第一象限,将所有可能埋藏宝藏的地方划成一个个矩形的土地,并把这些矩形土地 ... 
- bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会
		bzoj1787[Ahoi2008]Meet 紧急集合 bzoj1832[AHOI2008]聚会 题意: 给个树,每次给三个点,求与这三个点距离最小的点. 题解: 倍增求出两两之间的LCA后,比较容易 ... 
- BZOJ 1832、1787 洛谷 4281 [AHOI2008]紧急集合
		[题解] 题目要求找到一个集合点,使3个给定的点到这个集合点的距离和最小,输出集合点的编号以及距离. 设三个点为A,B,C:那么我们可以得到Dis=dep[A]+dep[B]+dep[C]-dep[L ... 
随机推荐
- Day1-E-BZOJ1293
			Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ... 
- MyEclipse 8.6.1 制作绿色版
			我们先在这个目录下新建一个文件: MyEclipse 10.6.bat , 文件内容如下: start eclipse\eclipse.exe -vm jre\bin\javaw.exe 接下来只需要 ... 
- Spring任务调度实战之Quartz Cron Trigger
			在Quartz中除了使用最简单的Simple Trigger以外,也可以使用类似Linux上Cron作业的CronTrigger的方式来运行Job,下面是一个小例子: 1. 首先是一个任务类,这个类没 ... 
- HihoCoder 1246:王胖浩与环
			#1246 : 王胖浩与环 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字. 对 ... 
- imple-unpack---攻防世界
			拿到题目查壳没有发现.题目已经明确说了,基本上是有壳的,Linux下面看看 应该就是upx的壳了,下载upx进行脱壳,https://sourceforge.net/projects/upx/file ... 
- Fiddler里面AutoResponder和mock用法
			AutoResponder 1.找到对应图片请求的链接 2.操作步骤如下图: mock 使用场景:上一步骤模块没有完成,但是下一步模块完成了,需要使用到快速模拟,主要使用的地方就是测试接口 
- XV6源代码阅读-虚拟内存管理
			Exercise1 源代码阅读 1.内存管理部分: kalloc.c vm.c 以及相关其他文件代码 kalloc.c:char * kalloc(void)负责在需要的时候为用户空间.内核栈.页表页 ... 
- phpStudy隐藏后门预警
			1.事件背景 近日,使用广泛的PHP环境集成程序包phpStudy被公告疑似遭遇供应链攻击,程序包自带PHP的php_xmlrpc.dll模块隐藏有后门,安恒应急响应中心和研究院随即对国内下载站点提供 ... 
- python 文本文件操作
			文件操作三步走:打开.读写.关闭. open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, close ... 
- eshop7-mysql
			1. Mysql 安装 执行 yum -y install mysql-server 注意:(1)是否使用sudo 权限执行请根据您具体环境来决定 (2)检查是否已经安装mysql-server rp ... 
