#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、双倍经验相关推荐

  1. BZOJ1787 [Ahoi2008]Meet 紧急集合 LCA

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1787 题意概括 有一棵节点为n个(n≤500000)的树.接下来m次询问(m≤500000),每次 ...

  2. [bzoj1787][Ahoi2008]Meet 紧急集合 倍增LCA

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 999999999 Solved: 99999999 ...

  3. bzoj1787 [Ahoi2008]Meet 紧急集合

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec   Memory Limit: 162 MB Submit: 2272   Solved: 1029 [ Su ...

  4. BZOJ 1787 [Ahoi2008]Meet 紧急集合——LCA

    1787: [Ahoi2008]Meet 紧急集合 题目传送门 解题思路 本题是裸的LCA,特殊就在是三个点的LCA,然而并没有什么关系. 三个节点两两求LCA,将会有两个一样的公共祖先,剩下的一个就 ...

  5. BZOJ1787: [Ahoi2008]Meet 紧急集合

    [传送门:BZOJ1787] 简要题意: 给出有n个点的图,n-1条无向边,保证任意两点之间能互相到达,每条边的权值为1,给出m个询问,每个询问输入x,y,z,求出一个点使得三个点到这个点的距离和最短 ...

  6. [BZOJ1787][Ahoi2008]Meet 紧急集合

    原题地址 倍增LCA复习题- AC code: #include <cstdio> #include <vector> using namespace std; const i ...

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

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

  8. [Ahoi2008] Meet 紧急集合 (LCA+倍增+rmq-st)

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec  Memory Limit:162 MB Submit: 590  Solved: 240 [Submit][ ...

  9. [Ahoi2008]Meet 紧急集合

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec  Memory Limit: 162 MB http://www.lydsy.com/JudgeOnline/ ...

  10. 1787: [Ahoi2008]Meet 紧急集合

    1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 1482  Solved: 652 [Submit ...

最新文章

  1. java 写流,Java IO中的其他读写流
  2. ubuntu 安装pycharm
  3. Cuda中Global memory中coalescing例程解释
  4. 开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易
  5. 雾里散步——这次聊聊自已
  6. [Swift]LeetCode289. 生命游戏 | Game of Life
  7. 软件开发实践的24条军规
  8. 【渝粤教育】国家开放大学2018年秋季 2080T现代教育思想 参考试题
  9. 【版本控制工具】svn服务器、客户端安装配置及eclipse的svn检出
  10. eclipse运行java项目
  11. 支持select下拉框选择输入和键盘输入两种输入方式并且支持手动换行
  12. 气溶胶反演输入转化错误_暗目标法的Himawari-8静止卫星数据气溶胶反演
  13. 实现HTTP下载的几种方式
  14. Mac操作指南:访问Windows共享文件
  15. P2P加速系统解决方案
  16. javalang 生成抽象语法树AST ----python源码分析
  17. linux 拼图游戏,立体艺术拼图游戏
  18. ITU-RBT.656图像传输格式
  19. 如何在mac上播放iphone音频
  20. 植物叶片相对电导率的测定

热门文章

  1. 苹果id登录_苹果服务器挂了...ID 登录不了!
  2. Unity简单几行代码让玩家水平移动更丝滑真实
  3. selenium | firefox代理设置
  4. Linux【第一篇总结】
  5. Webstorm的一些常用快捷键
  6. Linkcloud:IP独立计费将云主机的灵活性推向极致
  7. 亿图脑图MindMaster(Pro)
  8. 华为1+X网络系统建设与运维(中级)—— OSPF
  9. 出名的网络IT技术更新网站导航整理
  10. PythonNote017---计算房贷还款