博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu - 2586 How far away ?(最短路共同祖先问题)
阅读量:5318 次
发布时间:2019-06-14

本文共 2149 字,大约阅读时间需要 7 分钟。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586

 

最近公共祖先问题~~LAC离散算法

题目大意:一个村子里有n个房子,这n个房子用n-1条路连接起来,接下了有m次询问,每次询问两个房子a,b之间的距离是多少。

很明显的最近公共祖先问题,先建一棵树,然后求出每一点i到树根的距离dis[i],然后每次询问a,b之间的距离=dis[a]+dis[b]-2*dis[LCA(a,b)];

LCA(a,b)即是a,b的最近公共祖先。。

关于最近公共祖先,给大家推荐一个学长的博客,里面讲的很不错!!

 

1 # include
2 # include
3 # define N 40005 4 # define M 205 5 struct node{ 6 int from,to,next,val; 7 }edge[2*N]; 8 struct node1{ 9 int from,to,next,num;10 }edge1[2*M];11 int tol,head[N],head1[N],tol1,father[N],dis[N],LCA[M],n,m;12 bool visit[N];13 void add(int a,int b,int c)14 {15 edge[tol].from=a;edge[tol].to=b;edge[tol].next=head[a];edge[tol].val=c;head[a]=tol++;16 }17 void add1(int a,int b,int c)18 {19 edge1[tol1].from=a;edge1[tol1].to=b;edge1[tol1].next=head1[a];edge1[tol1].num=c;head1[a]=tol1++;20 }21 int find(int x)22 {23 if(x!=father[x])24 father[x]=find(father[x]);25 return father[x];26 }27 void tarjan(int u)28 {29 int j,v;30 visit[u]=1;31 father[u]=u;32 //33 for(j=head1[u];j!=-1;j=edge1[j].next)34 {35 v=edge1[j].to;36 if(visit[v]) LCA[edge1[j].num]=find(v);37 }38 //39 for(j=head[u];j!=-1;j=edge[j].next)40 {41 v=edge[j].to;42 if(!visit[v]) 43 {44 dis[v]=dis[u]+edge[j].val;45 tarjan(v);46 father[v]=u;47 }48 }49 }50 int main()51 {52 int i,ncase,a,b,c;53 scanf("%d",&ncase);54 while(ncase--)55 {56 scanf("%d%d",&n,&m);57 tol=0;58 memset(head,-1,sizeof(head));59 for(i=1;i

 

**************************

 

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int NN=50010; 8 9 int n,m;10 vector
> edge[NN],qe[NN];11 vector
q1,q2;12 13 int p[NN];14 int find(int x)15 {16 if (p[x]!=x) p[x]=find(p[x]);17 return p[x];18 }19 20 int sum=0,ans[NN],dis[NN];21 bool vis[NN]={ 0};22 void lca(int u,int fa)23 {24 p[u]=u;25 for (int i=0; i

 

转载于:https://www.cnblogs.com/weiyuan/p/5758012.html

你可能感兴趣的文章
poj 2886 Who Gets the Most Candies?(线段树)
查看>>
Codeforces Round #260 (Div. 2)
查看>>
编程算法 - 切割排序 代码(C)
查看>>
POJ 2418 Hardwood Species( AVL-Tree )
查看>>
AfxMessageBox和MessageBox差别
查看>>
glog摘记
查看>>
WCF从理论到实践(4):路在何方
查看>>
归并排序(转)
查看>>
Linux下全局安装composer方法
查看>>
Python_Xlrd&Xlwt
查看>>
项目执行过程
查看>>
SCM基础之过程描述
查看>>
面向对象初识
查看>>
不喜欢写测试的朋友看过来,与你分享写测试的经验 做一个爱写测试的程序员...
查看>>
Anaconda+vscode+pytorch环境搭建
查看>>
java 几个实用的小工具
查看>>
Html常用标签元素
查看>>
介绍一下Objective-c常用的函数,常数变量
查看>>
windows编译libevent时报告“缺少print_winsock_errors.obj”的解决
查看>>
.cue 文件格式
查看>>