ZOJ 3195 Design the city LCA转RMQ
题意:给定n个点,下面n-1行 u , v ,dis 表示一条无向边和边权值,这里给了一颗无向树
下面m表示m个询问,问 u v n 三点最短距离
典型的LCA转RMQ
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 100000
#define INF 1<<29
#define Logo 17
using namespace std; inline int Min(int a,int b){return a>b?b:a;} struct node{
int f,to,dis,nex;
}edge[N];
int edgenum,head[N],dis[N];
int E[N*2],R[N],D[N*2],en;//LCA
int ST[N*2][Logo]; void addedge(int u,int v,int dis){
edge[edgenum].f=u; edge[edgenum].to=v;
edge[edgenum].dis=dis; edge[edgenum].nex=head[u];
head[u]=edgenum++;
}
void makeRmqIndex(int n,int b[]) //返回最小值对应的下标
{
int i,j;
for(i=0;i<n;i++)
ST[i][0]=i;
for(j=1;(1<<j)<=n;j++)
for(i=0;i+(1<<j)-1<n;i++)
ST[i][j]=b[ST[i][j-1]] < b[ST[i+(1<<(j-1))][j-1]]? ST[i][j-1]:ST[i+(1<<(j-1))][j-1];
}
int LCA(int s,int v,int b[]) //这里返回的是最小值的 D中的下标(和E中下标一样)
{
s=R[s],v=R[v];
int k; if(s>v){k=s;s=v;v=k;}
k=(int)(log((v-s+1)*1.0)/log(2.0));
return b[ST[s][k]]<b[ST[v-(1<<k)+1][k]]? E[ST[s][k]]:E[ST[v-(1<<k)+1][k]];
} void DFS(int x,int deep){
E[en]=x;D[en]=deep; R[x]=en++; for(int i=head[x];i!=-1;i=edge[i].nex){
int v=edge[i].to;
if(R[v]==-1)
{
dis[v]=dis[x]+edge[i].dis;
DFS(v,deep+1);
E[en]=x; D[en++]=deep;
}
}
} void Input(int n){
memset(head,-1,sizeof(head));
edgenum=0;
while(--n)
{
int u,v,dis; scanf("%d %d %d",&u,&v,&dis);
addedge(u,v,dis);
addedge(v,u,dis);
}
memset(R,-1,sizeof(R));
en=0;
dis[0]=0;
} int main(){
int n,i,que,first=0;
while(~scanf("%d",&n)){
if(first++)printf("\n");
Input(n);
DFS(0,0);
makeRmqIndex(en,D);
scanf("%d",&que);
while(que--)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int ans=dis[a]+dis[b]+dis[c]-(dis[LCA(a,c,D)]+dis[LCA(b,c,D)]+dis[LCA(a,b,D)]);
printf("%d\n",ans);
}
}
return 0;
}
ZOJ 3195 Design the city LCA转RMQ的更多相关文章
- ZOJ 3195 Design the city (LCA 模板题)
Cerror is the mayor of city HangZhou. As you may know, the traffic system of this city is so terribl ...
- zoj 3195 Design the city LCA Tarjan
题目链接 : ZOJ Problem Set - 3195 题目大意: 求三点之间的最短距离 思路: 有了两点之间的最短距离求法,不难得出: 对于三个点我们两两之间求最短距离 得到 d1 d2 d3 ...
- zoj 3195 Design the city lca倍增
题目链接 给一棵树, m个询问, 每个询问给出3个点, 求这三个点之间的最短距离. 其实就是两两之间的最短距离加起来除2. 倍增的lca模板 #include <iostream> #in ...
- ZOJ Design the city LCA转RMQ
Design the city Time Limit: 1 Second Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...
- zoj——3195 Design the city
Design the city Time Limit: 1 Second Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...
- ZOJ 3195 Design the city 题解
这个题目大意是: 有N个城市,编号为0~N-1,给定N-1条无向带权边,Q个询问,每个询问求三个城市连起来的最小权值. 多组数据 每组数据 1 < N < 50000 1 < Q ...
- ZOJ - 3195 Design the city
题目要对每次询问将一个树形图的三个点连接,输出最短距离. 利用tarjan离线算法,算出每次询问的任意两个点的最短公共祖先,并在dfs过程中求出离根的距离.把每次询问的三个点两两求出最短距离,这样最终 ...
- [zoj3195]Design the city(LCA)
解题关键:求树上三点间的最短距离. 解题关键:$ans = (dis(a,b) + dis(a,c) + dis(b,c))/2$ //#pragma comment(linker, "/S ...
- zoj 3195(LCA加强版)
传送门:Problem 3195 https://www.cnblogs.com/violet-acmer/p/9686774.html 题意: 给一个无根树,有q个询问,每个询问3个点(a,b,c) ...
随机推荐
- Zookeeper工作原理
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...
- BZOJ 4552 排序
省选TM都能有BC原题? ... #include<iostream> #include<cstdio> #include<cstring> #include< ...
- Java笔记之数组
1.int flags[] = new int[10];数组中的每个元素初始化为0. Arrays.fill(flags, 0);将数组中每个元素置为0.
- qt多文档
http://blog.csdn.net/siren0203/article/details/5661541
- 理解 Bias 与 Variance 之间的权衡
有监督学习中,预测误差的来源主要有两部分,分别为 bias 与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助 ...
- 最大熵模型 Maximum Entropy Model
熵的概念在统计学习与机器学习中真是很重要,熵的介绍在这里:信息熵 Information Theory .今天的主题是最大熵模型(Maximum Entropy Model,以下简称MaxEnt),M ...
- php下的jsonp使用实例
参考资料:http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html 测试依赖条件: 项目eetopinOfficial 在hosts ...
- Oracle 安装 检查操作系统版本 必须是 5.0 5.1 的解决办法
打开 oraparam.ini文件 添加红色部分 Windows=5.1,5.2,6.1 最下面添加 [Windows-6.1-required]#Minimum display colours fo ...
- Cocoa Foundation框架学习笔记 - NSCalendar
+ (void)beginTest { /* FOUNDATION_EXPORT NSString * const NSGregorianCalendar; //公历(常用) FOUNDATION_E ...
- Android中垃圾回收日志信息
原因 GC_CONCURRENTfreed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2msGC_EXPLICITfreed 6K, ...