换根dp学习总结3

news2024/9/21 0:42:37

我也不想搞这么多,但是这东西真的太难了,因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了

寻找全图最远路径问题——Computer

——题目来源于hdu2196

题意:题目就是说会输入多组数据,每组数据给你一个n,表示结点的总数,然后的n-1行,从2个结点开始,每次输入其父亲结点还有与父亲结点之间的权值(题干上说明了,1一定是整棵树根节点) 

因此我们的做题思路为,在第一次的时候先让1成为整棵树的根节点,然后去预处理每个节点的最大路径和次大路径,然后统计出来

在第二次深搜的时候我们要做的就是要得到每个点如果向上走可以走多远的路径

然后我们在最后去判断一下是子树上的最大路径远,还是说是向上走的路径远

因此我们需要找到换根的时候的状态转移方程

u是子节点,v是父节点,

dp[ v ] [ 0 ] 表示以v为根节点的最大路径

dp[ v ] [ 1 ] 表示以v为根节点的次大路径

dp[ v ] [ 2 ] 表示以v向上走能走的最大路径

如果我的子节点是最大路径上的点

dp[ u ] [2]=max(dp[v][1],dp[v][2])+G[ v [[ i ]

如果我的子节点不是最大路径上的点

 dp[ u ] [2]=max(dp[v][0],dp[v][2])+G[ v [[ i ]

因此ac代码有了

#include <bits/stdc++.h>
using namespace std;
#define int long long

int n;
int v,w;
struct node{
	int son;
	int w;
};
vector<node> G[100005];//存储边的信息的 
int dp[100005][3];

void dfs1(int v)
{
	for(int i=0;i<G[v].size();i++)
	{
		dfs1(G[v][i].son);
		if(dp[G[v][i].son][0]+G[v][i].w>dp[v][0])
		{
			dp[v][1]=dp[v][0];
			dp[v][0]=dp[G[v][i].son][0]+G[v][i].w;
		}
		else if(dp[G[v][i].son][0]+G[v][i].w>dp[v][1])
		{
			dp[v][1]=dp[G[v][i].son][0]+G[v][i].w;
		}
	}
}

void dfs2(int v)
{
	for(int i=0;i<G[v].size();i++)
	{
		//如果子节点在这条最长边上
		if(dp[G[v][i].son][0]+G[v][i].w==dp[v][0]) 
		{
			dp[G[v][i].son][2]=max(dp[v][1],dp[v][2])+G[v][i].w;
		}
		else 
		{
			dp[G[v][i].son][2]=max(dp[v][0],dp[v][2])+G[v][i].w;
		}
		dfs2(G[v][i].son);
	}
}

signed main()
{
	while (cin >> n)   
    {   
        for (int i = 1; i <= n; ++i)   
        {   
            G[i].clear();  
            memset(dp[i], 0, sizeof(dp[i]));
        }  
        for (int i = 2; i <= n; i++)  
        {  
            cin >> v >> w;   
            G[v].push_back({i,w});   
        }  
        dfs1(1);  
        dfs2(1);  
        for (int i = 1; i <= n; i++)  
        {  
            cout << max(dp[i][0],dp[i][2]) << endl;  
        }  
    }  
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖&#xff1f; 怎么评价滴滴司机40岁了竟然还在跑滴滴&#xff1f; 怎么评价老师40岁了竟然还在教书&#xff1f;难道程序员的本职工作不是敲代码吗&#xff1f;无论你是管理层还是螺丝钉&#xff0c;工业环境下怎么可能一行代码都不敲呢&…

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具&#xff0c;用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面&#xff0c;使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括&#xff1a; 集群管理: 监控和管理 NameServer 和 Broker …

web框架:django基础(二)

文章目录 django基础&#xff08;二&#xff09;1.回顾2.今日概要3.路由系统3.1 传统的路由3.2 正则表达式路由3.3 路由分发小结 3.4 name3.5 namespaceapp_namenamespace的多层嵌套 3.4 最后的 / 如何解决&#xff1f;3.5 当前匹配对象小结 4.视图4.1 文件or文件夹4.2 相对和绝…

《QDebug 2024年7月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Qt5 QML 在某些环境下&#xff0c;有些字体中文渲染有问题 如 Qt5.15 在部分安卓机上复制的复只有半截宽&#xff0c;半径的径字也不对&#xff0c;等等 用 Qt6.7 测试则正常&#xff0c;或者换成其他如小米、阿里巴巴…

Golang的TLS版本配置参数-排坑经历

一、背景 公司有个黑盒监控拨测组件&#xff0c;类似可以通过各种协议如HTTP、TCP、ICMP等等针对目标主机、目标IP、目标站点进行定时拨测&#xff0c;通过返回的状态码等信息来推断&#xff0c;目标业务系统/主机、站点是否存在异常&#xff0c;健康情况如何。 最近在配置一个…

一文搞懂机器学习!2024.6月最新!(附代码实现)

前言 机器学习入门精品文章 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文介绍机器学习的基础内容。 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从数据中学习并做出决策或预测&am…

Jangow-1.0.1靶机漏洞复现(未完成)

首先&#xff0c;这个靶机只能使用VirtualBox打开&#xff0c;靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面&#xff0c;点击site进入到一个…

【C++】哈希容器

unordered系列关联式容器 在之前的博文中介绍过关联式容器中的map与set&#xff0c;同map与set一样&#xff0c;unordered_set与unordered_set也是关联式容器。 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;查询效率可以达到logN&#xff1b;在…

详解HTTP代理与SOCKS代理之间的差异

代理服务器在网络安全和隐私保护方面&#xff0c;发挥着十分重要的作用。其中&#xff0c;HTTP代理和SOCKS代理是两种常见的代理方式&#xff0c;它们在原理、功能和应用场景上有着明显的差异。本文将为大家深入分析这两种代理之间的区别&#xff0c;帮助大家更好地选择适合自己…

Linux中如何添加磁盘分区

在Linux中添加分区通常涉及到几个步骤&#xff0c;包括识别磁盘、创建分区、格式化分区&#xff0c;以及挂载或将其用作特定的文件系统类型&#xff08;如LVM、RAID等&#xff09;。以下是一个基本的步骤指南&#xff0c;假设你正在使用命令行界面&#xff08;CLI&#xff09;和…

《技术人求职之道》之简历优化篇(下):技能与项目亮点,如何让你的简历熠熠生辉

摘要 本文将深入探讨技术求职者在撰写简历时的关键要素,包括专业技能的表达和项目经验的描述。文章首先提出专业技能描述的六条基本原则,包括统一技术词汇、标点符号一致性、技术关键字的驼峰命名法、技术分类、技术热度和掌握度排序以及慎用“精通”。接着,指导读者如何美…

FFmpeg Windows安装教程

一. 下载ffmpeg 进入Download FFmpeg网址&#xff0c;点击下载windows版ffmpeg。 下载第一个essentials版本就行。 二. 环境配置 上面源码解压后如下 将bin添加到系统环境变量 验证安装是否成功&#xff0c;输入ffmpeg –version&#xff0c;显示版本即为安装成功。

必应Bing国内广告开户、投放流程和避坑攻略!

必应Bing作为微软旗下的搜索引擎&#xff0c;不仅在全球范围内拥有庞大的用户群体&#xff0c;在中国也有着稳定的市场份额。为了让企业更好地利用必应Bing在国内的广告资源&#xff0c;云衔科技提供了全面的广告开户及代运营服务&#xff0c;帮助企业轻松驾驭数字化营销之路。…

c语言指针3

文章目录 前言一、数组名的理解1.数组名正常情况是首元素的地址2.数组名不是首元素地址的情况2. 1 sizeof(arr)中的数组名2. 2 &arr中的arr代表整个数组 3. 结论 二、使用指针访问数组1.使用指针输入输出数组中的数 三、一维数组传参的本质四、冒泡排序五、二级指针5.1 二级…

betterZip免费版怎么下载 如何安装下载和激活BetterZip教程 BetterZip注册码密钥

BetterZip是一款功能齐全且对用户友好的Mac系统解压缩工具&#xff0c;它具备压缩文件及文件夹&#xff0c;解压压缩包&#xff0c;在线预览和编辑压缩包内文件等一系列功能。此外&#xff0c;BetterZip还有简洁的界面和操作&#xff0c;可以通过拖拽或右键菜单来压缩或解压文件…

深度体验AI计算平台:超算互联网模型服务与加速卡

目录 前言 AI算力性能体验 1、注册/登录 2、购买服务 3、运行的过程记录 4、运行效果 5、运行结果反馈 6、体验总结 番外篇&#xff1a;主流推荐 1、算法模型推荐 2、开源项目推荐 3、数据集推荐 结束语 前言 在人工智能的浪潮中&#xff0c;AI计算平台已成为研究…

系统移植(十一)根文件系统(未整理)

文章目录 一、根文件系统中各个目录文件功能解析&#xff1a;二、对busybox进行配置和编译&#xff08;一&#xff09;执行make help命令获取make的帮助信息&#xff08;二&#xff09;对busybox源码进行配置&#xff0c;配置交叉编译器&#xff08;三&#xff09;执行make men…

kill 命令详解

kill命令其实比较让人难以理解的点在于信号这块&#xff0c;开发中kill -9经常用&#xff0c;但却很少去深入了解其他信号参数的具体作用&#xff0c;本文主要是就信号这块做一个解释。 实验代码 public static void main(String[] args) {Runtime.getRuntime().addShutdownHoo…

文件系统 --- 文件结构体,文件fd以及文件描述符表

序言 在编程的世界里&#xff0c;文件操作是不可或缺的一部分。无论是数据的持久化存储、日志记录&#xff0c;还是简单的文本编辑&#xff0c;文件都扮演着至关重要的角色。然而&#xff0c;当我们通过编程语言如 C、Java 等轻松地进行文件读写时&#xff0c;背后隐藏的复杂机…