【poj1986】 Distance Queries

http://poj.org/problem?id=1986 (题目链接)

题意

  给出一棵树,询问树上两点间距离

Solution

  lca。

代码

// poj1985
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define MOD 100000000
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;

const int maxn=400010;
struct edge {int to,next,w;}e[maxn<<1];
int n,m,cnt,head[maxn],deep[maxn],sum[maxn],bin[40],fa[maxn][40];

void link(int u,int v,int w) {
	e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;e[cnt].w=w;
	e[++cnt].to=u;e[cnt].next=head[v];head[v]=cnt;e[cnt].w=w;
}
void dfs(int x) {
	for (int i=1;i<=30;i++) fa[x][i]=fa[fa[x][i-1]][i-1];
	for (int i=head[x];i;i=e[i].next) if (e[i].to!=fa[x][0]) {
			deep[e[i].to]=deep[x]+1;
			sum[e[i].to]=sum[x]+e[i].w;
			fa[e[i].to][0]=x;
			dfs(e[i].to);
		}
}
int lca(int x,int y) {
	if (deep[x]<deep[y]) swap(x,y);
	int t=deep[x]-deep[y];
	for (int i=0;bin[i]<=t;i++) if (bin[i]&t) x=fa[x][i];
	for (int i=30;i>=0;i--) if (fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
	return x==y ? x : fa[x][0];
}
int main() {
	bin[0]=1;for (int i=1;i<=30;i++) bin[i]=bin[i-1]<<1;
	scanf("%d%d",&n,&m);
	char ch;
	for (int u,v,w,i=1;i<=m;i++) {
		scanf("%d%d%d %c",&u,&v,&w,&ch);
		if (u==v) continue;
		link(u,v,w);
	}
	dfs(1);
	int q;scanf("%d",&q);
	while (q--) {
		int x,y;
		scanf("%d%d",&x,&y);
		int f=lca(x,y);
		printf("%d\n",sum[x]+sum[y]-2*sum[f]);
	}
	return 0;
}

  

时间: 2024-10-22 09:40:35

【poj1986】 Distance Queries的相关文章

【LCA求最近公共祖先+vector构图】Distance Queries

Distance Queries 时间限制: 1 Sec  内存限制: 128 MB 题目描述 约翰的奶牛们拒绝跑他的马拉松,因为她们悠闲的生活不能承受他选择的长长的赛道.因此他决心找一条更合理的赛道.此题的输入于第一题相同,紧接着下一行输入一个整数K,以后K行为K个"距离问题".每个距离问题包括两个整数,就是约翰感兴趣的两个农场的编号,请你尽快算出这两地之间的距离. N个点,N-1条边 输入 第1行:两个分开的整数:N和M: 第2..M+1行:每行包括4个分开的内容,F1,F2,L,

【技术】Media&#160;Queries移动设备样式

Viewpoint设置适应移动设备屏幕大小 (1) viewpoint虚拟窗口的主要作用是允许开发者创建一个虚拟的窗口(viewpoint),并自定义其窗口的大小和缩放功能.      Mobile safari虚拟窗口默认大小是980像素,android browser默认是800像素,IE默认是974像素,opera是850像素 (2)使用viewpoint    在meta元素中定义,其主要作用是设置web页面适应移动设备的屏幕大小 <meta name=”viewpoint” conte

【poj1987】 Distance Statistics

http://poj.org/problem?id=1987 (题目链接) 题意 给出一棵树,求树上距离不超过K的点对个数. Solution 点分治,同poj1741. 代码 // poj1987 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #define LL

【POJ1987】Distance Statistics ==【POJ1741】 树分治

广告: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44307489"); } 题意&题解 http://blog.csdn.net/vmurder/article/details/44302921 代码:(同一道题) #include <cstdio> #inclu

【XSY2411】【CF161D】Distance in Tree

\(Description\) 一棵树是一个不含环的连通图. 树上两点间的距离是两点间最短路径的长度(边的). 给你一棵\(n\)个点的树和一个正整数\(k\).找出不同的距离为\(k\)的点对的数量.注意点对\((u,v)\)和\((v,u)\)被认为是相同的. \(Input\) 第一行包含两个整数\(n\)和\(k\) \((1≤n≤50000,1≤k≤500)\)--点数和要求的两点间距离. 接下来\(n-1\)行代表了边\("a_{i}\) \(b_{i}"\)(没有引号)\

POJ1986 Distance Queries【最近公共祖先】【Tarjan-LCA算法】

Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 9777Accepted: 3425 Case Time Limit: 1000MS Description Farmer John's cows refused to run in his marathon since he chose a path much too long for their leisurely lifestyle. He

POJ 1986 Distance Queries 【输入YY &amp;&amp; LCA(Tarjan离线)】

任意门:http://poj.org/problem?id=1986 Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 16648   Accepted: 5817 Case Time Limit: 1000MS Description Farmer John's cows refused to run in his marathon since he chose a path much t

POJ1986 Distance Queries (LCA)(倍增)

Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 12950   Accepted: 4577 Case Time Limit: 1000MS Description Farmer John's cows refused to run in his marathon since he chose a path much too long for their leisurely lifesty

【leetcode】Edit Distance 详解

下图为TI C6xx DSP Nyquist总线拓扑图,总线连接了master与slave,提供了高速的数据传输.有很多种速率不同的总线,如图中的红色方框,最高速总线为CPU/2 TeraNet SCR(即VBUSM SCR),带宽为256bit,其他低速总线为CPU/3,CPU/6,带宽参考图中所示.总线之间用Bridge(桥)连接,作用包括转换总线的速率,使之与所流向总线的速率相同等. 在具体应用中,各种速率的总线完全可以满足复杂的数据传输,而数据传输的瓶颈往往在于连接总线之间的Bridge