BZOJ 3364: [Usaco2004 Feb]Distance Queries 距离咨询
来源:互联网 发布:网络媒介素养Ppt 编辑:程序博客网 时间:2024/05/22 06:32
LCA
每次询问两点的距离就是根到两点的距离和减去两倍的根到LCA的距离(ans=dis[x]+dis[y]-2*dis[LCA(x,y)])
#include<cstdio>#include<vector>#define RG register#define C (c=getchar())#define MAXN 100010#define maxlog 21using namespace std; inline int read(){ static char c;int a=0;C; while(c<'0'||c>'9')C; while(c>='0'&&c<='9')a=a*10+c-'0',C; return a;} struct Edge{int to,v;}; int n,m,s;int t[maxlog],dep[MAXN],fa[MAXN][maxlog],dis[MAXN];vector<Edge>e[MAXN]; inline void add(int x,int y,int z){ e[x].push_back((Edge){y,z}); e[y].push_back((Edge){x,z});} void dfs(int x){ for(int i=0;i<e[x].size();++i) { Edge &v=e[x][i]; if(v.to==fa[x][0]) continue; dep[v.to]=dep[x]+1; fa[v.to][0]=x; dis[v.to]=v.v+dis[x]; dfs(v.to); }} inline void swap(int &a,int &b){int t=a;a=b;b=t;} int LCA(int a,int b){ if(dep[a]>dep[b]) swap(a,b); int i=19; while(dep[a]<dep[b]) { if(dep[b]-dep[a]>=t[i]) b=fa[b][i]; --i; } i=18; if(a==b) return a; while(fa[a][0]!=fa[b][0]) { if(fa[a][i]!=fa[b][i]) a=fa[a][i],b=fa[b][i]; --i; } return fa[a][0];/* for(int i=s;i>=0;--i) if(dep[a]<dep[b]&&dep[a]<=dep[fa[b][i]]) b=fa[b][i]; for(int i=s;i>=0;--i) if(fa[a][i]!=fa[b][i]) a=fa[a][i],b=fa[b][i]; if(a==b) return a; else return fa[a][0];*/} int main(){ n=read(),m=read(); RG int i,j; for(i=1;i<=m;++i) { int x=read(),y=read(),z=read(); add(x,y,z); } fa[1][0]=0,dep[1]=0,dis[1]=0; t[0]=1; for(i=1;i<=19;++i) t[i]=t[i-1]*2; dfs(1); for(j=1;j<=19;++j) for(i=1;i<=n;++i) fa[i][j]=fa[fa[i][j-1]][j-1]; int k=read(); while(k--) { int x=read(),y=read(); printf("%d\n",dis[x]+dis[y]-2*dis[LCA(x,y)]); } return 0;}
0 0
- 【BZOJ】3364: [Usaco2004 Feb]Distance Queries 距离咨询
- BZOJ 3364: [Usaco2004 Feb]Distance Queries 距离咨询
- bzoj 3364: [Usaco2004 Feb]Distance Queries 距离咨询 LCA
- BZOJ3364: [Usaco2004 Feb]Distance Queries 距离咨询
- BZOJ3364: [Usaco2004 Feb]Distance Queries 距离咨询 LCA
- BZOJ 3365: [Usaco2004 Feb]Distance Statistics 路程统计 点分治
- BZOJ 3365 [Usaco2004 Feb]Distance Statistics 路程统计 树的点分治
- bzoj3365: [Usaco2004 Feb]Distance Statistics 路程统计
- bzoj 3366: [Usaco2004 Feb]Breeding 奶牛饲育
- 【点分治】3365: [Usaco2004 Feb]Distance Statistics 路程统计
- 3365: [Usaco2004 Feb]Distance Statistics 路程统计 点分治
- 【bzoj3365】[Usaco2004 Feb]Distance Statistics 路程统计 点分治
- [BZOJ3365][Usaco2004 Feb]Distance Statistics 路程统计(点分治)
- BZOJ3365: [Usaco2004 Feb]Distance Statistics 路程统计 点分治
- bzoj 3361: [Usaco2004 Jan]培根距离
- POJ 1984/BZOJ 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
- 3365: [Usaco2004 Feb]Distance Statistics 路程统计|树的点分治
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)
- git学习总结 (git秘钥,下载分支)
- UVALive5642 UVa706 HDU1332 LC-Display【打印图案】
- Cassandra3.x的cqlsh无法打开的解决办法
- Python 2.7.13 import urllib.request ImportError: No module named request
- 介绍几个python的音频处理库
- BZOJ 3364: [Usaco2004 Feb]Distance Queries 距离咨询
- Python 与 C/C++ 交互的几种方式
- PyTorch快速搭建神经网络及其保存提取方法
- 百度账号登陆
- R 调用 python
- python 调用 R,使用rpy2
- 基于spring 的ssi-uploader的多图片上传
- JavaEE学习04--request&response
- android 控制状态栏显示和隐藏的方法