摘要: 对于这道题目,我们考虑三个点的位置 如果三个点共线,比如下面这个样子 那么应该放在哪里呢?很显然应该放在中间这个点这里 如果三个点不共线呢?这个时候我们以两个点为端点画线,再画出其他分支 那么现在这个点应该放在哪里呢?应该放在中间“T”字形的交点那里 于是我们就清楚了,结合上前一种情况,我们最终应该 阅读全文
posted @ 2024-02-08 19:08 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 一个性质:\(A\)和\(B\)一定是直径的两端点 这个证明比较简单,我们假设一条非直径路径\(DE\),然后随便选一个点作为\(C\),通过讨论\(AB\)与\(DE\)是否相交即可 当然还有更简单的想法,我们随便找一个点\(C\),然后假设\(A\)和\(C\)更近,就有最终的长度是\(AC+B 阅读全文
posted @ 2024-02-08 18:19 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 法一:先求出一条直径,显然只有这条直径上的边才可能是答案 我们考虑最终答案怎么来的,我们把树看成这个样子 其中中间红色的是我们找出来的直径 那么其他直径只有可能是从分支开始走,然后到红色线上面走一段,最后再走到另一分支上(注意直径的端点都是叶子节点) 我们把所有直径都画出来,每次都取交集,然后就可以 阅读全文
posted @ 2024-02-08 17:51 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 不是,这为什么是对的啊? 第二个方法见蓝书 我们来严格证明一下这个做法 首先证明严格次小生成树的边一定只会与最小生成树的边相差一条边(只有一条边不一样) 假设有两条边不一样,我们删除最小生成树中不在严格次小生成树中的两条边,图就会分裂成三个连通块,如下 红色虚线是被删除的边 然后严格次小生成树新加入 阅读全文
posted @ 2024-02-08 16:02 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 主要讲一下心路历程 首先很显然的一点是,我们切断主要边之后,如果只考虑主要边,那么原图就会分成刚好两个连通块,那么此时如果有附加边连接两个连通块,那么这种附加边有且只能有一个 所以我们考虑对每条主要边,如何统计这种附加边的条数,但我们发现这种统计非常困难,于是我们使用转换对象法,考虑统计每一条附加边 阅读全文
posted @ 2024-02-08 14:42 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 一个树上每一个点都有一个组别,求相同组别的点对相差的最大距离。可以叫这题为“部分树的直径” 有一个结论:对于任意一个组别,深度最大的点一定在答案的点对里。 审视一下这个证明是如何分类的,对于LCA的部分,显然是通过讨论\(y\)是不是\(z\)的祖先来完成的;之后是通过讨论是否是子树来进行的 所以, 阅读全文
posted @ 2024-02-08 14:27 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 先求原图的M(最大)ST,然后树上两点路径边权最小值就是答案 证明:假设原图存在一条路径\(P\),\(P\)上存在非树边而且\(P\)的最小值比树上路径的最小值大,那么对于\(P\)上的某一条非树边,考虑在Kruscal的过程中,他之所以没有被选中,是因为他的两个端点已经连通了,而由于连通这两个点 阅读全文
posted @ 2024-02-08 11:52 最爱丁珰 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 这一道题目,我们看到\(q\)非常小,所以可以尝试从\(q\)入手 对每种组合,我们想要求出必须选择这些组合的MST,也即“含有必须边的MST”(尽管现在还不清楚每个组合的边是什么,下文会说) 这种情况跟陈立杰出的那道“tree”非常像,我们只用把必须边的边权缩小放到前面然后跑Kruscal即可 那 阅读全文
posted @ 2024-02-08 09:06 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑