其他分享
首页 > 其他分享> > 一通乱学【树问题相关】

一通乱学【树问题相关】

作者:互联网

只要我什么都不会,一道题就可以快乐学习一下午(

货车运输 蓝题

题目描述

A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路。每一条道路对车辆都有重量限制,简称限重。

现在有 \(q\) 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。

佬们的题解

最大生成树+LCA

首先我不会\(LCA\),润去看了\(LCA\),P3379 最近公共祖先(题目),然后发现\(LCA\)是个壮汉,算法标签点进去,一堆紫题真吓人。只看了倍增,明天慢慢研究其它算法。

知识点:倍增法LCA

被增法LCA(视频)

最后,这道题的大佬题解:佬的题解

Kruskal重构树+LCA

知识点:重构树

感觉就是微改了\(Kruskal\),算法逻辑像一开始没看并查集题解时,我自己写的并查集hhh。Kruskal重构树—学习笔记,主要摘抄在下面了,感觉没什么必要点进去链接。

关键摘要:

  1. 基于\(Kruscal\)框架(将边排序)

  2. 依次遍历每条边,若该边连接的两个节点\(u\)和\(v\) 不在一个并查集内,就新建一个结点\(node\),该点点权为这条边的边权

  3. 找到\(u,v\)所在并查集的根$u_i,v_i \(,连边\)( n o d e , u_ i ) ( n o d e , v_ i ) $

  4. 更新并查集$f a [ u_i ] = n o d e , f a [ v _i ] = n o d e $

遍历完原图所有边后,我们建出来的必定是一棵树,也就是我们要的kruskal重构树

注意这棵树是以最后新建的结点为根的有根树,若原图不连通,即建出的是一个森林,那么就遍历每个节点,找到其并查集的根作为其所在树的根

最后,这道题的大佬题解:佬的题解

树链剖分+线段树

首先我不会线段树,润去看了线段树:猫猫讲线段树(视频),用的不是c,不过问题不大。

然后我不会树链剖分,润去看了树链剖分:树链剖分(视频)

逻辑都不难,但是感觉很容易写错喔。明日默写一下。

最后,这道题的大佬题解:佬的题解

启发式合并

说是不用\(LCA\),感觉很神奇,待看...

佬的题解

标签:乱学,剖分,题解,线段,查集,树链,LCA,一通,相关
来源: https://www.cnblogs.com/shanzr/p/16484695.html