题面 传送门 题解 代码不就百来行么也不算很长丫 虽然这题随机化贪心就可以过而且速度和正解差不多不过我们还是要好好学正解 前置芝士 边分治 米娜应该都知道点分治是个什么东西,而边分治,顾名思义就是对边进行分治,即每次选出一条"子树中点的个数的最大值最小"的边,处理所有经过这条边的路径的贡献,然后割掉这条边之后对子树递归下去就好了 然而出题人给你一个菊花图就能把你卡得不要不要的 我们发现上述策略在一个二叉树上是最优的,因为割掉边之后左右子树大小都会变为原来的一半 于是这里就需要多叉树转二…
题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个分析有1.2.3棵树时的做法. 首先说一个结论,在下面讲解中能应用到: 对于一棵树T1的直径两端点为u,v,对于另一棵树T2的直径两端点为x,y,如果将两棵树合并(即将两棵树中的各一个点连边)那么新树的直径的两端点一定是u,v,x,y中的两个. 证明见树的直径及其性质与证明. 一.一棵树 这个很好做…
题目:https://loj.ac/problem/2339 两棵树的话,可以用 CTSC2018 暴力写挂的方法,边分治+虚树.O(nlogn). 考虑怎么在这个方法上再加一棵树.发现很难弄. 看了看题解,发现两棵树还有别的做法. 就是要最大化 d1[ x ] + d2[ x ] + d1[ y ] + d2[ y ] - 2*d1[ lca1(x,y) ] - 2*d2[ lca2(x,y) ] ,考虑在第一棵树 T1 上 dfs 地枚举 lca1 ,那么考虑的答案就是 T1 上在当前点 c…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ347.html 题意 有三棵树,边有边权. 对于所有点对 (x,y) 求在三棵树上 x 到 y 的距离之和 的最大值. 点数 <=100000 题解 我自闭了. 在此之前,我没写过边分治,只写过一次虚树. 我自闭了. 一棵树怎么做? 树的直径. 两棵树怎么做? 有一个定理:从点集A中的点到点集B中的点的最长路径的两端点一定属于   点集A中最长路两端点和点集B中最长路两端点  构成的集合. 首先,在第一…
又是一道虚树好题啊 我们建出来虚树,然后考虑dp过程,我们分别令\(sum[x],mndis[x],mxdis[x],size[x]\)为子树内的路径长度和,最短链,最长链,子树内关键点个数. 对于一个关键点,首先他的\(size=1,mndis=0\) 我们考虑怎么合并,首先我们可以直接维护三个值表示最终的答案.如果说当前的点\(size[x]>0\),那么我们就可以每次用他和新的子树进行更新ans,然后合并 QWQ 其实合并就差不多类似的方式 主要是\(sum\)合并的时候,你要用\(siz…
题面传送门 神仙虚树题. 首先考虑最 trival 的情况:\(m=n-1\),也就是一棵树的情况.这个我相信刚学树形 \(dp\) 的都能够秒掉罢(确信).直接设 \(dp_{i,0/1}\) 在表示 \(i\) 的子树内选择,\(i\) 选/不选的方案数.转移就 \(dp_{u,0}=\prod\limits_{v\in son_u}(dp_{v,0}+dp_{v,1}),dp_{u,1}=\prod\limits_{v\in son_u}dp_{v,0}\) 即可. 接下来考虑有非树边的情…
题目大意 给你三棵树,点数都是\(n\).求 \[ \max_{i,j}d_1(i,j)+d_2(i,j)+d_3(i,j) \] 其中\(d_k(i,j)\)是在第\(k\)棵数中\(i,j\)两点之间的距离. \(n\leq 100000\) 题解 设\(d(i,j)=d_1(i,j)+d_2(i,j)+d_3(i,j),h_k(i)\)为\(i\)号点在第\(k\)棵树上的深度 一棵树 树形DP. 时间复杂度:\(O(n)\) 两棵树 这是一道集训队自选题. 点分治+动态点分治 设这两个点…
洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作) 操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除,则输出-1并无视删除操作) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示一开始小根堆的个数和接下来操作的个数. 第二行包含N个正整数,其中…
作者:zifeiy 标签:左偏树 这篇随笔需要你在之前掌握 堆 和 二叉树 的相关知识点. 堆支持在 \(O(\log n)\) 的时间内进行插入元素.查询最值和删除最值的操作.在这里,如果最值是最小值,那么这个堆对应地称为小根堆:如果最值是最大值那么这个堆对应地称为大根堆. 当然咯,在我们的STL容器中提供了优先队列(priority_queue),可以直接用它来模拟堆. 但是,priority_queue 不涉及合并两个堆的操作(pb_ds有这样的功能),这就是说,如果现在有两个堆 A 和…
洛谷题面传送门 神仙题. 首先看到这样两棵树的题目,我们肯定会往动态树分治的方向考虑.考虑每次找出 \(T_2\) 的重心进行点分治.然后考虑跨过分治中心的点对之间的连边情况.由于连边边权与两棵树都有关,直接处理这个"跨过重心"不太方便.不过注意到一个性质,那就是对于同一棵子树中的两个点 \(x,y\),如果我们直接将它们的边权设为 \(dep_x+dep_y+\text{dist}(x,y)\),其中 \(dep_x\) 为 \(x\) 到分治重心的距离,\(\text{dist}(…