LCA【p2912】 牧场散步 (USACO08OCT)
顾z
你没有发现两个字里的blog都不一样嘛 qwq
题目描述-->p2912 牧场散步
题意概括
给定一个树,给你Q个询问,每次询问输入一个二元组\((x,y)\),要求求出\((x,y)\)的距离.
明显带权lca.
这里写一下递推式
\]
\]
定义:
\(f[u][i]\)代表\(u\)向上跳\(2^i\)步到达的节点.
\(gw[u][i]\)代表\(u\)向上跳\(2^i\)步到达的节点的边权和.
为什么\(f[u][i]=f[f[u][i-1]][i-1]\)?
我们从\(u\)到达\(f[u][i]\)需要\(2^i\)步,而到达\(f[u][i-1]\)需要\(2^{i-1}\)步,再从这个位置跳\(2^{i-1}\)步,的话就到达了\(f[u][i]\)。
\]
又因为我们处理\(f[u][i-1]\)一定比处理\(f[u][i]\)要早,所以这样转移即可.
初始化
f[u][0]=fa;
gw[u][0]=edge[i].w;//即连向u的边权.
然后这样这个题就变成了裸的带权lca问题 qwq.
---------------------代码---------------------
#include<bits/stdc++.h>
#define R register
#define N 1008
using namespace std;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,head[N],tot,m;
int depth[N],f[N][18],gw[N][18];
struct cod{int u,v,w;}edge[N<<1+8];
inline void add(int x,int y,int z)
{
edge[++tot].u=head[x];
edge[tot].v=y;
edge[tot].w=z;
head[x]=tot;
}
void dfs(int u,int fa,int dis)
{
depth[u]=depth[fa]+1;
f[u][0]=fa;gw[u][0]=dis;
for(R int i=1;(1<<i)<=depth[u];i++)
f[u][i]=f[f[u][i-1]][i-1],
gw[u][i]=gw[f[u][i-1]][i-1]+gw[u][i-1];
for(R int i=head[u];i;i=edge[i].u)
{
if(edge[i].v==fa)continue;
dfs(edge[i].v,u,edge[i].w);
}
}
inline int lca(int x,int y)
{
if(depth[x]>depth[y])swap(x,y);
int ans=0;
for(R int i=17;i>=0;i--)
if(depth[y]-(1<<i)>=depth[x])
ans+=gw[y][i],y=f[y][i];
if(x==y)return ans;
for(R int i=17;i>=0;i--)
{
if(f[x][i]==f[y][i])continue;
ans+=gw[x][i]+gw[y][i];
y=f[y][i],x=f[x][i];
}
return (ans+gw[x][0]+gw[y][0]);
}
int main()
{
in(n),in(m);
for(R int i=1,x,y,z;i<n;i++)
{
in(x),in(y),in(z);
add(x,y,z);add(y,x,z);
}
dfs(1,0,0);
for(R int x,y;m;m--)
{
in(x),in(y);
printf("%d\n",lca(x,y));
}
}
LCA【p2912】 牧场散步 (USACO08OCT)的更多相关文章
- 洛谷P2912 牧场散步Pasture Walking
题目描述 The \(N\) cows (\(2 \leq N \leq 1,000\)) conveniently numbered \(1..N\) are grazing among the N ...
- 【Luogu】P2912牧场散步(TarjanLCA)
题目链接 老天……终于碰上一个除了模板之外的LCA题了 这道题用Tarjan来LCA.树上两个点的路径是唯一的,所以钦定一个根,两点间的路径就是两点到根的路径减去双倍的公共祖先到根的路径.大概很好理解 ...
- bzoj1602 / P2912 [USACO08OCT]牧场散步Pasture Walking(倍增lca)
P2912 [USACO08OCT]牧场散步Pasture Walking 求树上两点间路径--->lca 使用倍增处理lca(树剖多长鸭) #include<iostream> # ...
- LCA || BZOJ 1602: [Usaco2008 Oct]牧场行走 || Luogu P2912 [USACO08OCT]牧场散步Pasture Walking
题面:[USACO08OCT]牧场散步Pasture Walking 题解:LCA模版题 代码: #include<cstdio> #include<cstring> #inc ...
- 洛谷P2912 [USACO08OCT]牧场散步Pasture Walking [2017年7月计划 树上问题 01]
P2912 [USACO08OCT]牧场散步Pasture Walking 题目描述 The N cows (2 <= N <= 1,000) conveniently numbered ...
- 洛谷——P2912 [USACO08OCT]牧场散步Pasture Walking(lca)
题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures ...
- [USACO08OCT]牧场散步Pasture Walking BZOJ1602 LCA
题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures ...
- luogu P2912 [USACO08OCT]牧场散步Pasture Walking
题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures ...
- 洛谷 P2912 [USACO08OCT]牧场散步Pasture Walking
题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures ...
随机推荐
- USACO Section1.2 Milking Cows 解题报告
milk2解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- 移动APP自动化测试框架对比
转自微信公众号:腾讯移动品质中心TMQ 移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护.从分层测试的角度,自动化测试应该逐层进行.最大量实现自动 ...
- CSU-1989 赶路的小X
题目链接 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1989 题目 Description A国一共有N座城市,由M条双向公路连 ...
- 最干净的pyinstaller打包成exe应用程序方法
在anaconda环境下进行pyinstaller打包后,程序非常大,70行代码打包后有280MB,这是因为会将conda环境携带的库都打包进去导致的.为了获得更纯净的包环境,我们需要安装纯pytho ...
- mongodb 部署
安装mongodb-3.4 1)将安装包上传至服务器 2)对压缩文件进行解压 tar -zxvf mongodb-linux-x86_64-suse12-v3.4-latest.tar.gz 3)把解 ...
- JavaWeb笔记(八)JQuery
三个版本 1.x:兼容 ie678,使用最为广泛的,官方只做BUG维护, 功能不再新增.因此一般项目来说,使用1.x版本就可以了 最终版本:1.12.4 2.x:不兼容ie678,很少有人使用,官方只 ...
- nginx 匹配路由分发php和golang
大概这么个形式,可以走通 server { listen ; server_name localhost; root "E:/wwwroot180/public"; # 匹配指定路 ...
- ArcGIS 创建要素时提示“表已经被注册(table already registered)”
今天一位实施大哥在ArcCatalog中要重建一个要素类,所以就在ArcCatalog中连接上Oracle数据库,直接删除了要素类,然后重新创建了一个新的要素类,可是却报错“表已经被创建”,并提示不可 ...
- 【bzoj4756】[Usaco2017 Jan]Promotion Counting 离散化+树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6832263.html 题目描述 The cows have once again tried to form a s ...
- axis2实践(一)JAX-WS入门示例
1. 实例说明 现在大多数的网站都有通知功能(例如,放假通知,网站维护通知等),本实例就是针对于通知,发布两个WebService服务 1)根据供应商编号,状态,发布日期查询通知信息 2)根据编号查询 ...