【BZOJ1787】【Ahoi2008】Meet 紧急集合 LCA、双倍经验
#include <stdio.h>
int main()
{puts("转载请注明出处谢谢");puts("http://blog.csdn.net/vmurder/article/details/43235305");
}
233……
【BZOJ1832】【AHOI2008】聚会 倍增lca
就是这道题。输入输出都没有改。
http://blog.csdn.net/vmurder/article/details/42607739
题解也在以前那篇博客里面。
代码:(直接复制的那篇博客)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 501000
#define LOGN 20
#define inf 0x3f3f3f3f
using namespace std;
struct KSD
{int v,next;
}e[N<<1];
int head[N],cnt;
inline void add(int u,int v)
{cnt++;e[cnt].v=v;e[cnt].next=head[u];head[u]=cnt;
}
int n,m;
int fa[N][LOGN],deep[N];
void dfs(int x,int p)
{int i,v;deep[x]=deep[p]+1;for(i=head[x];i;i=e[i].next){v=e[i].v;if(v==p)continue;fa[v][0]=x;dfs(v,x);}return ;
}
inline void array()
{int i,j;for(j=1;j<LOGN;j++)for(i=1;i<=n;i++)fa[i][j]=fa[fa[i][j-1]][j-1];
}
int lcansx,lcansy;
inline int getlca(int x,int y)
{if(deep[x]<deep[y])swap(x,y);int i,j,k;lcansx=lcansy=0;for(i=LOGN-1;i>=0;i--)if(deep[fa[x][i]]>=deep[y])x=fa[x][i],lcansx+=(1<<i);if(x==y)return x;for(i=LOGN-1;i>=0;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i],lcansy+=(1<<i);lcansy+=1,lcansx+=lcansy;return fa[x][0];
}
int main()
{
// freopen("test.in","r",stdin);int i,ans,id;int a,b,c;scanf("%d%d",&n,&m);for(i=1;i<n;i++){scanf("%d%d",&a,&b);add(a,b),add(b,a);}dfs(1,0);array();while(m--){scanf("%d%d%d",&a,&b,&c);int lca=getlca(a,b),temp=lcansx+lcansy;getlca(lca,c);temp+=lcansx+lcansy;ans=temp,id=lca;lca=getlca(a,c),temp=lcansx+lcansy;getlca(lca,b);temp+=lcansx+lcansy;if(ans>temp)ans=temp,id=lca;lca=getlca(b,c),temp=lcansx+lcansy;getlca(lca,a);temp+=lcansx+lcansy;if(ans>temp)ans=temp,id=lca;printf("%d %d\n",id,ans);}return 0;
}
【BZOJ1787】【Ahoi2008】Meet 紧急集合 LCA、双倍经验相关推荐
- BZOJ1787 [Ahoi2008]Meet 紧急集合 LCA
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1787 题意概括 有一棵节点为n个(n≤500000)的树.接下来m次询问(m≤500000),每次 ...
- [bzoj1787][Ahoi2008]Meet 紧急集合 倍增LCA
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 999999999 Solved: 99999999 ...
- bzoj1787 [Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 2272 Solved: 1029 [ Su ...
- BZOJ 1787 [Ahoi2008]Meet 紧急集合——LCA
1787: [Ahoi2008]Meet 紧急集合 题目传送门 解题思路 本题是裸的LCA,特殊就在是三个点的LCA,然而并没有什么关系. 三个节点两两求LCA,将会有两个一样的公共祖先,剩下的一个就 ...
- BZOJ1787: [Ahoi2008]Meet 紧急集合
[传送门:BZOJ1787] 简要题意: 给出有n个点的图,n-1条无向边,保证任意两点之间能互相到达,每条边的权值为1,给出m个询问,每个询问输入x,y,z,求出一个点使得三个点到这个点的距离和最短 ...
- [BZOJ1787][Ahoi2008]Meet 紧急集合
原题地址 倍增LCA复习题- AC code: #include <cstdio> #include <vector> using namespace std; const i ...
- [BZOJ1787][Ahoi2008]Meet 紧急集合[BZOJ1832][AHOI2008]聚会
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1787 http://www.lydsy.com/JudgeOnline/problem.ph ...
- [Ahoi2008] Meet 紧急集合 (LCA+倍增+rmq-st)
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit:162 MB Submit: 590 Solved: 240 [Submit][ ...
- [Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MB http://www.lydsy.com/JudgeOnline/ ...
- 1787: [Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1482 Solved: 652 [Submit ...
最新文章
- java 写流,Java IO中的其他读写流
- ubuntu 安装pycharm
- Cuda中Global memory中coalescing例程解释
- 开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易
- 雾里散步——这次聊聊自已
- [Swift]LeetCode289. 生命游戏 | Game of Life
- 软件开发实践的24条军规
- 【渝粤教育】国家开放大学2018年秋季 2080T现代教育思想 参考试题
- 【版本控制工具】svn服务器、客户端安装配置及eclipse的svn检出
- eclipse运行java项目
- 支持select下拉框选择输入和键盘输入两种输入方式并且支持手动换行
- 气溶胶反演输入转化错误_暗目标法的Himawari-8静止卫星数据气溶胶反演
- 实现HTTP下载的几种方式
- Mac操作指南:访问Windows共享文件
- P2P加速系统解决方案
- javalang 生成抽象语法树AST ----python源码分析
- linux 拼图游戏,立体艺术拼图游戏
- ITU-RBT.656图像传输格式
- 如何在mac上播放iphone音频
- 植物叶片相对电导率的测定