
图论—最近公共祖先
文章平均质量分 80
Ezereal
这个作者很懒,什么都没留下…
展开
-
hdu 2586 How far away ?(Tarjan)
这道题题意是,给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离。这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了。这里的计算方法是,记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - 2 * dis[lca(v, v)]了,这个表达式还是比较容易理解的。。在求解最近公共祖先为问题上,用到的是Tarja原创 2015-12-07 13:10:09 · 406 阅读 · 0 评论 -
Codeforces Round #343 (Div. 2) E. Famil Door and Roads (树形dp,lca)★ ★ ★
题意:给你一棵节点数为n的树,随机地在树上的任意两个点连一条边,给你m个询问,每次询问两个点,问连一条边后如果这两个点能在简单环中,简单环的期望是多少。简单环即这两个点在一个环上,这个环是没有重边的。思路:这里先设置几个变量dep[i]:i节点的深度,这里记dep[0]=0,dep[1]=1;sz[i]:i节点的子树的节点总数;f[i][j]:i节点的2^j倍父亲;sdown[i]:i节转载 2016-09-01 20:02:47 · 372 阅读 · 0 评论 -
LCA问题的Tarjan算法
一 LCA问题LCA问题的一般形式:给定一棵有根树,给出若干个查询,每个查询要求指定节点u和v的最近公共祖先。LCA问题有两类解决思路:在线算法,每次读入一个查询,处理这个查询,给出答案。离线算法,一次性读入所有查询,统一进行处理,给出所有答案。一个LCA的例子如下。比如节点1和6的LCA为0。二 算法思路Tarjan算法是离线算法,基于后序转载 2016-09-13 22:12:13 · 421 阅读 · 0 评论