图论-最近公共祖先
KIJamesQi
这个作者很懒,什么都没留下…
展开
-
poj1470Closest Common Ancestors(LCA模版)
就是一个板子,sum[lca(u, v)]++就好了。const int LOGN = 11;const int maxn = 1 << LOGN;int head[maxn], nxt[maxn], pnt[maxn], ecnt;int sum[maxn], mark[maxn];int dep[maxn];int fa[LOGN][maxn];void addedge(int u,原创 2016-06-24 14:09:58 · 707 阅读 · 0 评论 -
hdu2460 Network
思路:题目的意思是要求在原图中加边后桥的数量,首先我们可以通过Tarjan求边双连通分量,对于边(u,v),如果满足 low[v]>dfn[u],则为桥,这样我们就可以知道图中桥的数目了。对于每一次query,可以考虑dfs树,树边肯定是桥,然后连 上u,v这条边之后,就会形成一个环,这样环内的边就不是割边了,所以只要找到u,v的LCA,把这个路径上的桥标记为否就可以了。const int ma原创 2016-06-24 16:10:01 · 725 阅读 · 0 评论 -
Aizu 2677 Breadth-First Search by Foxpower(LCA + BFS)
题目链接 题目大致意思就是给出含有n节点的树,1为树根。从1开始bfs搜索整棵树,不过有顺序。深度小的比大的优先, 同一深度的其优先值为其父节点在上一层的搜索顺序,如果同属一个父节点,那么就是节点编号小的优先。然后求出路径总和sum。比如这次搜索到了u,下次需要搜索到v, 那么sum += dis(u, v)。树上的dis就是lca了,因为边权为1. 然后剩下的就是模拟这个过程原创 2016-08-22 23:37:00 · 412 阅读 · 0 评论 -
SPOJ COT(树上k大,主席树+LCA)
给出一颗含有n个节点的树,每个节点有个权值。问u到v的路径上第k小的权值是多大。 做法就是主席树+LCA,每个节点建立一颗从根(默认为1)到它的线断树,那么u->v路径的线断树就等于T[u] + T[v] - 2*LCA(u, v) + (l <= a[LCA] && a[LCA] <= r)。/*****************************************Author原创 2016-08-23 20:45:12 · 589 阅读 · 0 评论 -
HDU 4729 An Easy Problem for Elfness(树上主席树+LCA+二分)
题目大意:给你一棵树,每条边有一个容量。然后m个询问,每个询问是互相独立的,给你两个点S, T,一个预算K, 建一条容量为1的新边的费用A(可以建在任一两个节点之间,包括S,T),将某一条现有的边容量扩大1的费用B。 问从S到T在预算允许的情况下最大流是多少。 这个分两种情况来讨论最优解: 1.如果A≤BA \leq B,显然新建不会比扩展差,可以建立kA\frac{k}{A原创 2016-08-23 21:14:44 · 537 阅读 · 0 评论 -
hdu 4822 Tri-war(LCA倍增)
题目链接 给出一棵树,n,3≤n≤105个点n,3 \leq n \leq 10^5个点,然后m次讯问,1≤m≤105m次讯问,1 \leq m \leq 10^5,时限是10000ms,显然每次讯问要控制在log级。 每次讯问给出a,b,c三个不同的点,对于每个点求出树上的点到它的距离严格小于到其他两个点的距离的个数。 如果是两个点,可以找到两个点的路径中点,把树分成分别包含a,b原创 2016-09-28 21:23:04 · 878 阅读 · 0 评论