随笔分类 -  最近公共祖先(lca)

摘要:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827367819 题意:给出n个城市,n-1条边,无环图,m次询问使u、v、w间联通的最短距离。 解法:lca求两两点间最短距离除以二。 //#include<bits/stdc++ 阅读全文
posted @ 2020-02-20 17:58 无名菜鸟1 阅读(568) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1330 题意:给出一颗树,给出父子关系,求两点的lca。 解法:dfs序+ST表: 原理: 欧拉序(前序遍历得到的序列,叫dfs序,但数字可以重复出现,一进一出,叫欧拉序),会发现根结点总在中间,而根结点是该段序列深度最小的点因此两个点的LCA, 阅读全文
posted @ 2020-02-20 16:48 无名菜鸟1 阅读(310) 评论(0) 推荐(0)
摘要:https://codeforces.com/gym/101808/problem/K 题意:给出n个点n条边的无向连通图,m次询问u、v间的最短路径。 解法:n条边减去一条即为树。所以找出成环的边为a , b , l ; u 、 v两点间有三种路径取最短即可: 1、dis(u , v) 2、dis 阅读全文
posted @ 2020-02-19 02:46 无名菜鸟1 阅读(187) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1330 题意:给出一颗n个节点的树,问u、v的lca。 解法:倍增: 1、两数组fa[i][j]表示i节点的长为2j的祖先,de[u]记录节点深度。 2、dfs遍历预处理de[u] , 有fa[u][i] = fa[fa[u][i-1]][i-1 阅读全文
posted @ 2020-02-19 00:53 无名菜鸟1 阅读(312) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一颗n个节点,n-1边且有距离(带权),m次询问,问两点间最短距离。 解法:记录每一个节点到根节点(默认为1)距离,u、v两点距离为dis[u]+dis[v]-2*dis[fa]. //#incl 阅读全文
posted @ 2020-02-17 21:49 无名菜鸟1 阅读(178) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1330 题意:给出一颗n个节点的树,n-1条边表示u是v的父节点。询问a与b的最近公共祖先 解法:tarjian: 1、找出根节点(无父节点)从根点开始dfs遍历图,直到遍历该节点已经没有可访问的点为止 2、回溯,将v与u合并(注意u与v的父子关 阅读全文
posted @ 2020-02-17 20:12 无名菜鸟1 阅读(435) 评论(0) 推荐(0)