*【bzoj 1602】牧场行走(LCA)
来源:互联网 发布:安信证券客户经理 知乎 编辑:程序博客网 时间:2024/06/04 20:11
传送门biu~
lca模板题,不多说直接上代码。
#include<bits/stdc++.h>#define N 1005using namespace std;int n,q;int head[N],nex[2*N],to[2*N],len[2*N],tp;int storey[N],dep[N];int f[N][11];inline void add(int x,int y,int l){ nex[++tp]=head[x]; head[x]=tp; to[tp]=y; len[tp]=l;}void dfs(int x,int father){ f[x][0]=father; storey[x]=storey[father]+1; for(int i=head[x];i;i=nex[i]){ if(to[i]==father) continue; dep[to[i]]=dep[x]+len[i]; dfs(to[i],x); }}int lca(int x,int y){ if(storey[x]<storey[y]) swap(x,y); for(int i=10;i>=0;--i) if(storey[f[x][i]]>=storey[y]) x=f[x][i]; if(x==y) return x; for(int i=10;i>=0;--i){ if(f[x][i]!=f[y][i]){ x=f[x][i]; y=f[y][i]; } } return f[x][0];}int main(){ scanf("%d%d",&n,&q); for(int i=1;i<=n-1;++i){ int a,b,c; scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } dfs(1,0); for(int i=1;i<=10;++i) for(int j=1;j<=n;++j) f[j][i]=f[f[j][i-1]][i-1]; for(int i=1;i<=q;++i){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",dep[a]+dep[b]-2*dep[lca(a,b)]); } return 0;}
阅读全文
0 0
- *【bzoj 1602】牧场行走(LCA)
- bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)
- bzoj 1602: [Usaco2008 Oct]牧场行走(暴力LCA)
- BZOJ 1602 Usaco2008 Oct 牧场行走 倍增LCA
- 1602: [Usaco2008 Oct]牧场行走|Lca
- [BZOJ1602][Usaco2008 Oct]牧场行走(LCA)
- 【bzoj1602】牧场行走 lca
- BZOJ 1602: [Usaco2008 Oct]牧场行走
- BZOJ 1602 [Usaco2008 Oct]牧场行走 dfs
- BZOJ 1602: [Usaco2008 Oct]牧场行走
- BFS-BZOJ-1602-[Usaco2008 Oct]牧场行走
- bzoj 1602: [Usaco2008 Oct]牧场行走
- BZOJ 1602 [Usaco2008 Oct]牧场行走
- [BZOJ]1602: [Usaco2008 Oct]牧场行走
- 【bzoj 1602】[Usaco2008 Oct]牧场行走
- BZOJ [Usaco2008 Oct]牧场行走
- bzoj1602[Usaco2008 Oct]牧场行走(lca模版)
- [Usaco2008 Oct]牧场行走
- leetcode 55. Jump Game(C语言,跳数,递归思想,两种解法)20
- 无人驾驶系列优秀博客传送门(持续更新)
- python实现汉诺塔(递归实现)
- github创建网页简历
- Linux命令:系统管理命令和系统安全命令
- *【bzoj 1602】牧场行走(LCA)
- spl 教程一 基础应用
- 顺序栈的应用-括号匹配
- Angular Material介绍
- 当mqtt客户端向服务端发送信息出现掉包的问题
- 大话设计模式之总结
- Timus OJ 1696(URAL) Salary for Robots
- Educational Codeforces Round 29
- 13个开源GIS软件