LCA模板题

随便找的倍增模板...

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e5+11;
  4. int to[maxn<<2],nxt[maxn<<2],cost[maxn<<2];
  5. int head[maxn],tot;
  6. int fa[maxn][20],dep[maxn];
  7. void init(){
  8. memset(head,-1,sizeof head);
  9. memset(fa,0,sizeof fa);
  10. tot=0;
  11. }
  12. void add(int u,int v,int w){
  13. to[tot]=v;cost[tot]=w;
  14. nxt[tot]=head[u];
  15. head[u]=tot++;
  16. }
  17. void bfs(int root){
  18. queue<int> que;
  19. memset(dis,0,sizeof dis);
  20. memset(fa,0,sizeof fa);
  21. memset(dep,0,sizeof dep);
  22. fa[root][0]=root;dep[root]=0;dis[root]=0;
  23. que.push(root);
  24. while(!que.empty()){
  25. int u = que.front(); que.pop();
  26. for(int i = 1; i < 20; i++) fa[u][i]=fa[fa[u][i-1]][i-1];
  27. for(int i = head[u]; ~i; i = nxt[i]){
  28. int v=to[i],w=cost[i];
  29. if(v==fa[u][0])continue;
  30. dep[v]=dep[u]+1;dis[v]=dis[u]+w;fa[v][0]=u;
  31. que.push(v);
  32. }
  33. }
  34. }
  35. int lca(int u,int v){
  36. if(dep[u]<dep[v]) swap(u,v);
  37. for(int i = 0; i < 20; i++) if((dep[u]-dep[v])&(1<<i)) u=fa[u][i];
  38. if(u==v)return u;
  39. for(int i = 19; i >= 0; i--) if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
  40. return fa[u][0];
  41. }
  42. int main(){
  43. int n,m,u,v,w,x;
  44. while(scanf("%d%d",&n,&m)!=EOF){
  45. init();
  46. for(int i = 1; i <= n-1; i++){
  47. scanf("%d%d%d",&u,&v,&w);
  48. add(u,v,w);add(v,u,w);
  49. }
  50. bfs(1);
  51. for(int i = 1; i <= m; i++){
  52. scanf("%d%d",&u,&v);
  53. x=lca(u,v);
  54. printf("%d\n",dis[u]+dis[v]-2*dis[x]);
  55. // cout<<"lca "<<x<<endl;
  56. }
  57. }
  58. return 0;
  59. }

UESTC 1437的更多相关文章

  1. ACM:UESTC - 649 括号配对问题 - stack

      UESTC - 649  括号配对问题 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu ...

  2. UESTC 1015 Lweb and pepper --前,后缀最值

    题意: n种食物,每种含花椒的概率为Pi,现在已经选择了[L,R]这个区间(下标)的食物,要再选一个,使总的食物只有一种含花椒的概率最大,问选哪个最好,相同的选下标小的. 解法: 就不写解法了.此处有 ...

  3. UESTC 1852 Traveling Cellsperson

    找规律水题... Traveling Cellsperson Time Limit: 1000ms Memory Limit: 65535KB This problem will be judged ...

  4. UESTC 1851 Kings on a Chessboard

    状压DP... Kings on a Chessboard Time Limit: 10000ms Memory Limit: 65535KB This problem will be judged ...

  5. UESTC 30 最短路,floyd,水

    最短路 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Statu ...

  6. ural 1437. Gasoline Station

    1437. Gasoline Station Time limit: 1.0 secondMemory limit: 64 MB Once a gasoline meter broke at a fi ...

  7. uestc oj 1218 Pick The Sticks (01背包变形)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...

  8. uestc oj 1217 The Battle of Chibi (dp + 离散化 + 树状数组)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 给你一个长为n的数组,问你有多少个长度严格为m的上升子序列. dp[i][j]表示以a[i]结尾长为j ...

  9. 2015 CCPC D- Pick The Sticks(UESTC 1218) (01背包变形)

    http://acm.uestc.edu.cn/#/problem/show/1218 既然二维dp表示不了,就加一维表示是否在边界放置,放置一个,两个.有一个trick就是如果只放一根,那么多长都可 ...

随机推荐

  1. LaTex: 表格单元格内容 分行显示/换行

    问题:如何同时让表格同一行一个单元格的文字能垂直居中?比如说文字超长超出页面范围需要分行显示 答:(来源于smth) 方案一: \newcommand{\tabincell}[2]{\begin{ta ...

  2. 201671010127 2016—2017-2 java学习新征程

    通过大一整个学年对Python和C语言的学习,我对编程的感受有了更进一步的认识.随着时代的进步,编程语言也在实时更新,面对越来越多的编程语言,对于在编程方面的初学者,选择一门适合自己的编程语言就显得十 ...

  3. linux终端后台运行

    nohup command &(然后X退出即可) &也可用来在终端中同时执行几条命令(并行,最后面不要忘记加&) command1 & command2 & c ...

  4. POJ 1741 点分治

    方法:指针扫描数组 每次选择树的重心作为树根,从树根出发进行一次DFS,求出点到树根的距离,把节点按照与树根的的距离放进数组d,设置两个指针L,R分别从前.后开始扫描,每次满足条件时答案累加R-L., ...

  5. Hibernate和JPA

    ORM(Object/Relational Mapping : 对象关系映射)就是利用描述对象和数据库之间映射的元数据,自动(且透明)的将java应用程序中的对象持久化到关系数据库的表中.HIbern ...

  6. CentOS7下安装pip和pip3

    1.首先检查linux有没有安装python-pip包,直接执行 yum install python-pip 2.没有python-pip包就执行命令 yum -y install epel-rel ...

  7. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  8. K-D TREE算法原理及实现

    博客转载自:https://leileiluoluo.com/posts/kdtree-algorithm-and-implementation.html k-d tree即k-dimensional ...

  9. 前端学习笔记2017.6.21-html是个什么东西

    html有两种意思,html语言和html格式 html语言是一种面向人类的计算机语言,这是啥意思?人类用html这种语言描述出一个网页的样子,浏览器解析这个语言并展示出来. html格式是一种文件格 ...

  10. 612D The Union of k-Segments

    传送门 题目大意 给定n个区间,问你被覆盖至少k次的区间(两端连续区间可以合并)最少有多少个,并输出. 分析 大水题呀QwQ,只需要将每个点的位置及它是左端点还是右端点这两个信息存起来然后进行一些简单 ...