首页 > 其他分享 >P4220 通道笔记

P4220 通道笔记

时间:2024-01-30 15:15:53浏览次数:24  
标签:表示 分治 P4220 笔记 2d 答案 通道 最长 dis

边分治神题。

前置知识:边分治,虚树。

题意

给定 $3$ 棵有边权的树,每棵树都含有 $n$ 个节点,令 $dis_i(x, y)$ 表示 $(x, y)$ 在第 $i$ 棵树上的距离。求一组 $(i, j)$,使得 $\sum\limits_{k = 1}^3 dis_k(i, j)$ 最大,为了方便,只需输出最大值。

题解

考虑边分治。下面用 \(T_i\) 来表示第 \(i\) 棵树。

对 \(T_1\) 进行边分治,设 \(d_1(x)\) 表示 \(x\) 点到分治边一侧的距离,那么答案就转化成了 \(d_1(i) + d_1(j) + dis_2(i, j) + dis_3(i, j)\)。然后将当前分治块内的所有点在 \(T_2\) 上拉出来,建一棵虚树 \(T'_2\),再设 \(d_2(x)\) 表示 \(x\) 在 \(T_2\) 上的带权深度,答案又转化成了 \(d_1(i) + d_1(j) + d_2(i) + d_2(j) + dis_3(i, j) - 2d_2{p}\),其中 \(p\) 表示 \(T'_2\) 中 \((i, j)\) 的 \(\text{LCA}\),显然 \(p\) 也是 \(T_2\) 中 \((i, j)\) 的 \(\text{LCA}\)。

所以现在枚举 \(p\),然后在 \(p\) 在 \(T'_2\) 的子树中,找到 \((i, j)\) 使:1. \(i, j\) 在 \(T_1\) 的分治边的两侧。2. 答案最大。接着可以发现,上面的答案可以变成 \((d_1 + d_2)(i) + (d_1 + d_2)(j) + dis_3(i, j) - 2d_2(p)\),因为 \(p\) 是我们枚举的,故可以省略。接着,考虑把 \((d_1 + d_2)(i) + (d_1 + d_2)(j)\) 给转化一下。一个精妙的处理方法是:在 \(T_3\) 中新建 \(i', j'\),然后将 \(i'\) 与 \(i\) 之间连一条边权为 \(d_1(i) + d_2(i)\) 的边,对 \(j\) 和 \(j'\) 同理。这样答案就转化成了 \(dis_3(i', j') - 2d_2(p)\),也就是求 \(T_3\) 中的最长路(要保证 \(i, j\) 在分治边的两侧)。

我们发现,最长路竟然是可以合并的!也就是说:设 \(x\) 只有两个儿子,\(l, r\) 是 \(x\) 的左儿子子树的最长路两端点,\(l', r'\) 是右儿子的。那么 \(x\) 的最长路两端点一定是 \(l, l', r, r'\) 中的两个!根据这个结论,就可以在 \(T'_2\) 上面进行合并了。有一个细节,设 \(L\) 表示分治边左侧的点集,\(R\) 表示分治边右侧的点集,如果要保证 \((i, j)\) 在分治边的两侧,那么先把 \(L\) 的最长路和 \(R\) 的最长路分别求出,然后再对两个最长路,分别选出一个点进行合并,这才能保证 \(i, j\) 在不同侧的限制。

于是这题就做完了,时间复杂度 \(O(n \log^2 n)\)。代码可能有点难写。

标签:表示,分治,P4220,笔记,2d,答案,通道,最长,dis
From: https://www.cnblogs.com/CTHOOH/p/17997067

相关文章

  • 动态 DP 学习笔记
    动态DPP4719动态DP给定一棵\(n\)(\(n\leqslant10^5\))个点的树,点带点权。有\(m\)(\(m\leqslant10^5\))次操作,每次操作给定\(x,y\),表示修改点\(x\)的权值为\(y\)。你需要在每次操作之后求出这棵树的最大权独立集的权值大小。首先考虑\(m=0\)时的做法,可以......
  • 哪款笔记软件支持电脑和手机互通数据?
    上班族在日常工作中,随手记录工作笔记已成为司空见惯的场景。例如:从快节奏的会议记录到灵感迸发的创意;跟踪项目进展,记录每个阶段的成果、问题和下一步计划;记录、更新工作任务清单等,工作笔记承载了职场人士丰富多彩的工作生活。为了能够随时随地记录工作事项,越来越多的职场人士提出......
  • 白话机器学习算法入门笔记
    机器学习中常见的十大算法包括:1.线性回归(LinearRegression)-用于预测连续值的简单线性回归模型。2.逻辑回归(LogisticRegression)-用于分类问题的logistic回归模型。3.决策树(DecisionTree)-一种流行的树形分类与回归方法。4.支持向量机(SVM)-一种二分类模型,Fi......
  • KMP 学习笔记
    前言——\(char\)与\(string\)有的时候\(char\)数组确实比\(string\)好用,且字符串长度很大时\(string\)会被卡掉,所以不要犯懒,老实用\(char\),\(string\)可以用但是慎用。同时很多情况下为了方便和减少出错,我们会想办法把字符串的坐标从\(0\simlen-1\)变成\(1......
  • 【学习笔记】 - 可持久化数据结构初步:可持久化线段树
    前置知识:权值线段树权值线段树每个节点不再是区间,而是值在某个范围内的个数可以用于求区间第\(k\)大值动态开点一个点只有在需要时才被创建正文什么是可持久化数据结构就是说这个数据结构能保留每一个历史版本且支持操作可持久化线段树又称函数式线段树/主席树......
  • WebAssembly入门笔记[4]:利用Global传递全局变量
    利用WebAssembly的导入导出功能可以灵活地实现宿主JavaScript程序与加载的单个wasm模块之间的交互,那么如何在宿主程序与多个wasm之间传递和共享数据呢?这就需要使用到Global这个重要的对象了。一、数值类型全局变量二、将JavaScript函数设置为全局变量三、利用全局变量处理字符......
  • 《梦断代码》阅读笔记2
    当今社会,软件已经成为人类生活中不可或缺的一部分,“人类文明运行于软件之上”的说法虽然有点自卖自夸,但它很是明确的反应了软件在人类社会中的地位。它存在于厨具里、汽车里、玩具里、建筑中,商业、科研、医疗、基础公共设施哪里都有它的影子,人类生存之所需都系于计算机代码这根易......
  • 《梦断代码》阅读笔记3
    寒假静下来读书的时间比较少,因此我并没有读完《梦断代码》这本有意思的书,以后会慢慢读的,现在说一说目前读完的部分的感受吧。首先,这本书深入讨论了软件开发的复杂性和编程的挑战性,尤其是在项目管理和时间规划方面。对于“软件时间”的分析让我意识到在实际编程中,时间管理并非总是......
  • GNN论文阅读笔记
    DOI10.1109/TNN.2008.2005605任何数据都可以由一张图(Graph)表示,图(Graph)是由一系列的点(vertex)与边(edge)的集合。机器学习的目标是:拟合一个函数τ(G,n) →Rm,即映射图G与其中某一节点n成一个m-dim的实数向量。根据实际任务,这种拟合有所偏向,大体可分为两类:关注于图特征的拟合......
  • 大三寒假学习进度笔记20
    今日对LangChain进行了一些了解。LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型(LLM)和聊天模型提供支持的应用程序的过程。LangChain可以轻松管理与语言模型的交互,将多个组件链接在一......