随笔分类 - 算法——LCA
摘要:"题目链接" problem solution 这是一道一个顶六个的好题!!! 说一下各档部分分怎么写吧。 先看一下$S_i=1$和$T_i=1$的部分分怎么写。 如果$S_i=1$ 当且仅当第$i$个点的深度$dep_i=w_i$时,该点可以观察到人。且观察到的人数为终点位于其子树内的人数。 如果
阅读全文
摘要:"题目链接" problem 一棵n个点带边权的树,有m个条路径。选择一条边,将其权值变为0,使得长度最长的路径长度最小。求该长度最小为多少。 solution 其实仔细一想并不难。 删除一条边会导致所有经过这条边的路径长度减少该边长度。所有没经过这条边的路径长度不变。 所以我们只需要知道没经过该边
阅读全文
摘要:题目链接 思路 我们换一种求$dep[lca(i,j)]$的方法。 将从根到$i$的路径上所有点的权值加$1$,然后求从根节点到j路径上点的权值和。就是$i$和$j$的$lca$的深度。 以此类推,对于求$\sum\limits_{i=l}^rdep[lca(i,z)]$,我们可以对于从l到r中的每
阅读全文
摘要:"luogu3398" 思路: 假设松鼠a要从a1去a2,松鼠b要从b1去b2,ks表示lca(a1,a2)和lca(b1,b2)中深度较深的那个。那么,若要使得两只松鼠可能相遇,则只要满足lca(a1,b1),lca(a1,b2),lca(a2,b1),lca(a2,b2)中任意一个的深度深于ks
阅读全文
摘要:"luogu2420" 思路: 非常裸的一道lca的题,维护一个lca数组,一个异或数组,然后在找lca的过程中。进行异或即可。 代码: cpp include include using namespace std; const int N=100000+1000,logN=20; int lca
阅读全文
摘要:"题目链接" 题意: 其实题目的意思就是问从x到y权值最小的路的权值最大能是多少。 思路: 首先可以先把这张图变成一棵树。因为那些更小的点肯定是不跑更优秀,而且题目没有要求路程,所以生成一棵树,只要能保证在同一个图里面的点能够连通即可。又因为他要使最小权值最大,所以可以只留下那些权值更大的边。所以跑
阅读全文
摘要:LCA LCA(Lowest CommonAncestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先 一般采用倍增的方法来求最近公共祖先。还可以用树链剖分。dfs序似乎也可以 思路 用数组fa[i][j]表示从i往上跳2j步所得到的祖先。用dep[i]表示i的深度。然后
阅读全文