首页 > 其他分享 >7.23 树上问题笔记

7.23 树上问题笔记

时间:2023-07-25 20:57:29浏览次数:40  
标签:10 计算机 d1 源点 笔记 son 7.23 树上 为根

题单

由于题目过多,只放几道重要的。。。

T1

题目

• A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路。每一条道路对车辆都有重量限制 \(z\),简称限重。
• 现在有 \(q\) 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。
• \(1 ≤ n \leq 10^4\),\(1 ≤ m \leq 5 \cdot 10^4\),\(1 ≤ q ≤ 3 \cdot 10^4\),\(0 ≤ z ≤ 10^5\)。

Solution

• 实现 \(x\) 到 \(y\) 的所有路经中,路径上边的最小值最大。
• 容易想到把图转化为最大生成树,树上两点的路径就是所有路径中,最小值最大的路径。
• 树上两点间的最小路径值,容易想到用倍增计算。

T2

题目

• 有一个树形的水系,由 \(N−1\) 条河道和 \(N\) 个交叉点组成。
• 每条河道都有一个容量,连接 \(x\) 与 \(y\) 的河道的容量记为 \(c(x, y)\)。
• 有一个节点是整个水系的发源地,可以源源不断地流出水,我们称之为源点。
• 除了源点之外,树中所有度数为 \(1\) 的节点都是入海口,可以吸收无限多的水,我们称之为汇点。
• 流入该点的河道水量之和等于从该点流出的河道水量之和。
• 整个水系的流量就定义为源点单位时间发出的水量。
• 在流量不超过河道容量的前提下,求哪个点作为源点时,整个水系的流量最大,输出这个最大值。
• \(N \leq 2 \cdot 10^5\),数据保证结果不超过 \(2^{31}−1\)。

Solution

• 定义 \(f_i\) 表示以 \(i\) 为根的子树的最大流量。

\[ f_n = \sum_ {v \in son(u)} \begin{cases} \min (f_v, w(u, v)) & deg_v > 1 \\\\ w(u, v) & deg_v = 1 \end{cases}\]

• 接下来考虑换根 \(dp\)
• 对于原本以 \(u\) 为根,转为以 \(v\) 为根,分类讨论。

  1. 如果 \(deg_u = 1\),\(f_v += w(u, v)\)。
  2. 如果 \(deg_v = 1\),\(f_v = \min(fu − w(u, v),w(u, v))\)。
  3. 否则,\(f_v += \min(fu − \min(fv ,w(u, v)),w(u, v))\)。

T3

题目
• 一所学校前一段时间买了第一台计算机(所以这台计算机的 \(ID\) 是 \(1\))。
• 近年来,学校又购买了 \(N−1\) 台新计算机。
• 每台新计算机都与之前买进的计算机中的一台建立连接。
• 现在请你求出第 \(i\) 台计算机到距离其最远的计算机的电缆长度。
• \(1 ≤ N ≤ 10000\), 电缆总长度不超过 \(10^9\)。

Solution

• 先考虑如何计算第 \(1\) 台计算机到距离其最远的计算机的电
缆长度。
• 以第 \(1\) 台电脑为根,计算树的最大深度即为答案。
• 计算每个点的答案,还是换根 \(dp\)。。。
• 下文中,以 \(son_u\) 表示 \(u\) 的重儿子,\(d1_u\) 表示以 \(u\) 为根的子树的最大深度,\(d2_u\) 表示以 \(u\) 为根的子树的次大深度。
• 原本以 \(u\) 为根,换到以 \(v\) 为根,分类讨论。

\[ d1_v = \begin{cases} \max(d1_v, d2_u + w(u, v)) & son_u = v \\\\ \max(d1_v, d1_u + w(u, v)) & son_u \neq v \end{cases}\]

标签:10,计算机,d1,源点,笔记,son,7.23,树上,为根
From: https://www.cnblogs.com/User90174/p/17580979.html

相关文章

  • 【学习笔记】无向图的连通性
    #割点**定义:**在无向图连通图中,若把点$x$删去后整个图就不连通了,则$x$为割点(割顶)。**朴素方法:**每次删去一个点,然后判断图是否连通,时间复杂度为$O(n(n+m))$。**Tarjan算法:**$dfn_x$:$x$被`dfs`到的时间戳$low_x$:在$x$及以后被搜索的所有节点的$low$值和这些节......
  • 笔记-交易圣经
    笔记-交易圣经通用原则一:思想准备最大逆境:没有最坏,只有更坏情绪指向:目标与期望失利:失败是必然随机市场:不确定性,不可预测性输得起才会赢:生存是第一要义风险管理:如上交易伙伴:防止自欺欺人财务边界:闲钱通用原则二:启蒙避免爆仓风险:有可能即是迟早会发生。没有杠杆减......
  • Numpy学习笔记之Numpy练习
    练习1:分别按照要求,生成一个一维数组、二维数组,并且查看其shapea1=np.array([1,2,'a','hello',[1,2,3],{'one':100,'two':200}])a2=np.array([list(range(6)),list('abcdef'),[True,False,True,False,True,True]])print(a1,'......
  • 2023长郡集训 动态规划笔记
    动态规划原理何为动态规划?动态规划(\(\text{Dynamicprogramming}\)),简称DP。DP并不是一种算法,与模拟、贪心一样,而是一种解决问题的方式。DP的基本思想为「将给定的问题拆分为一个个规模更小的子问题,直到子问题可以直接解决,返回/保存这个值,再根据方程一步步推出原本问题的答......
  • python教程 入门学习笔记 第1天
    初识python一、python语言简介:1、起源:1989年由荷兰的前谷歌程序员吉多.范罗苏姆(龟叔)创造,python的命名来源于英国电视喜剧MontyPython’sFlyingCircus飞行马戏团2、优势:python、Java、c这几种是世界最流行语言;用途广泛,被称为万能语言;语法简洁,上手简单;例如:print("hellowor......
  • typescripts学习笔记(三)
    typescripts学习笔记(三)-实现过程引言Typescript是一种由微软开发的开源编程语言,它是JavaScript的超集,可以在任何支持JavaScript的环境中运行。本篇文章将教你如何使用Typescript来创建一个简单的学习笔记应用。整体流程下面是整个实现过程的流程图:步骤描述步骤1......
  • [c/c++][考研复习笔记]内部排序篇学习笔记
    考研排序复习笔记插入排序#include<stdio.h>#include<stdlib.h>#defineMaxSize9//折半插入排序voidZBInsertSort(intA[],intn){ inti,j,high,low,mid; for(i=2;i<=n;i++){ A[0]=A[i]; low=1;high=i-1; while(low<=high){ mid=(low+high)/2......
  • Numpy学习笔记
    一、Numpy基础数据结构NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:①实际的数据②描述这些数据的元数据二、常见方法importnumpyasnpar=np.array([[[1,2,3,4,5,6,7],[1,2,3,4,5,6,7],[1,2,3,4,5,6,7]],[[1,2,3,4,5,6,7],[1,2,3,4,5,6,7],[1,2,3,4,5,......
  • 手写数字识别代码学习笔记
    图像预处理importtorchvision.transformsastransforms#定义数据预处理步骤【compose->组成】transform=transforms.Compose([transforms.Resize((128,128)),#将图像大小调整为128x128像素transforms.RandomCrop(100),#随机裁剪图像为10......
  • Redis Scan命令踩坑笔记
    前记大部分人在接触Redis时就都会了解到Redis是以单线程的形式处理用户命令,导致O(N)的命令有极大的几率会阻塞Redis,所以在使用Redis时需要放弃一些O(n)命令的使用,比如不要去使用KEYS命令而应该使用SCAN命令,然而SCAN命令也有一些坑。1.踩到的坑为了减少MySQL的压力,在部分变动比较少......