【JZOJ5776】小x游世界【换根法】【DP】【DFS】

单目和多目视觉统一标定 单目和多目视觉统一标定 一.单目视觉标定 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在 阅读详情

题目大意:

题目链接:https://jzoj.net/senior/#main/show/5776
题目图片:
http://wx4.sinaimg.cn/mw690/0060lm7Tly1fvjhzcpt7jj30j50f1aaw.jpg
http://wx1.sinaimg.cn/mw690/0060lm7Tly1fvjhzchmayj30j30e5t8x.jpg
http://wx4.sinaimg.cn/mw690/0060lm7Tly1fvjhzby695j30j506imx7.jpg


思路:

P.S.这道题题目描述太难写而我语文太菜没法简化所以各位大大就看图片吧orz。
这道题,我们先跑一边DFS,求出以1为根的时候的答案和每个点的子树节点数量(含自己)。
然后利用换根法(听说属于树形DP?),可以 O ( 1 ) O(1) O(1)求出每个点为根的时候的答案。最后取一个最优答案即可。


代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#define N 701000
#define ll long long
using namespace std;

int n,c[N],head[N],son[N],u,tot=1;
ll sum[N],ans;
char ch;

struct edge
{
	int next,to,dis;
}e[N*2];

int read()  //不加快读会T
{
    u=0;
    while((ch=getchar())<=47||ch>=58);u=(u<<3)+(u<<1)+ch-48;
    while((ch=getchar())>=48&&ch<=57) u=(u<<3)+(u<<1)+ch-48;
    return u;
}

void add(int from,int to,int dis)
{
	e[++tot].to=to;
	e[tot].dis=dis;
	e[tot].next=head[from];
	head[from]=tot;
}

int dfs(int x,ll k,int fa)  //DFS
{
	int s=1;
	sum[1]+=k;  //sum[i]表示以第i个点为根的答案
	for (int i=head[x];~i;i=e[i].next)
	 if (e[i].to!=fa)
	  s+=dfs(e[i].to,k+(ll)e[i].dis,x);
	son[x]=s;  //son[x]表示以x为根的子树的节点数(含自己)
	return s;
}

void change(int x,int fa)  //换根
{
	for (int i=head[x];~i;i=e[i].next)
	 if (e[i].to!=fa)
	 {
	 	int y=e[i].to;
	 	sum[y]=sum[x]-(ll)son[y]*(ll)e[i].dis+(ll)(son[1]-son[y])*(ll)e[i^1].dis;
	 	//有些点要增加路径,而有些点要减少
	 	change(y,x);
	 }
}

int main()
{
	memset(head,-1,sizeof(head));
	n=read();
	for (int i=1;i<=n;i++)
	 c[i]=read();
	int x,y,z;
	for (int i=1;i<n;i++)
	{
		x=read();
		y=read();
		z=read();
		add(x,y,z-c[x]);
		add(y,x,z-c[y]);
	}
	dfs(1,0,-666);
	change(1,-666);
	ans=1e17;
	for (int i=1;i<=n;i++)
	 if (sum[i]<ans)  //取最小值
	 {
	 	ans=sum[i]; 
	 	x=i;
	 }
	cout<<x<<"\n"<<ans;
	return 0;
}
YOLOv13有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进 《YOLOv13改进专栏重磅更新》推出500+创新改进方案,涵盖卷积、主干网络、注意力机制、检测头等核心模块优化。专栏提供完整项目代码及答疑服务,包含YOLOv13网络结构解析、环境配置、模型训练全流程指导。内容分为八大模块:卷积优化、注意力机制、细节涨点、主干网络改进、特征融合、检测头优化、小目标检测及Mamba联合改进等,支持多种创新点组合应用,助力科研论文发表。现开放限时订阅,提供试读章节和详细技术解析。 阅读详情

相关推荐

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 205

肥宅快乐树 换根+树形DP/dfs

肥宅快乐树是一棵神秘而巨大的树,它长有许多枝条和节点,每条枝连接树中两个节点,每个节点上都长有一瓶肥宅快乐水。 何老板是肥宅快乐水的资深爱好者。历经艰难,他终于找到了这棵传说中的快乐树。他想要获取树上所有的快乐水,迫不及待地想从树根往树上爬。 每经过一条树枝都会耗费一定体力。而且快乐树自带防御功能,即每条枝上都有一个一次性陷阱,一旦踏上该枝,何老板就会被立即弹射回地面,他得重新从根往上爬...

weixin_30549657的博客 217

Transformer时序预测避坑指南:TFT在风电场的5个实战经验

本文分享了Temporal Fusion Transformer在风电场功率预测中的五个实战经验,涵盖数据预处理、模型调优、显存优化、注意力机制解读及在线部署。针对风电数据噪声大、概念漂移等挑战,提供了从构建数据质量标签到高效超参调优的具体方案,并强调利用Transformer架构的可解释性进行业务洞察,助力实现稳健的工业级时序预测。

bert9linguist的博客 461

换根dp

换根dp解决的问题示例讲解例题 解决的问题 基于树上dp的基本模型,题目初始不给出根节点,需要遍历每一个根节点,达到某一个根节点的最佳情况。 暴力的思路是循环每个节点作为根节点,同时在遍历整个树,时间复杂度是O(n2)O(n^2)O(n2)。 换根dp主要就是将时间复杂度降到O(n)O(n)O(n),在根结点切换时,直接通过一些已经计算过的数据在O(1)O(1)O(1)就能得到另一个根的结果。 一般是通过二次扫描,第一次dfs获得预处理数据,第二次dfs进行根节点切换 示例讲解 需要找到以x点为根结点的树,

weixin_44232130的博客 2194

基于物联网技术智慧园林绿化养护管理信息平台

近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。   智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。   智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信...

Cesium的博客QQ2252224326 2459

英飞凌ADS开发环境搭建全流程:从安装到第一个程序烧录

本文详细介绍了英飞凌ADS开发环境搭建的全流程,包括环境准备、ADS安装与配置、MemTools烧录技巧等关键步骤。针对嵌入式开发者,特别提供了从安装到第一个程序烧录的实战指南,涵盖常见问题解决方案和优化建议,帮助开发者快速上手英飞凌AURIX系列微控制器的开发工作。

qsc901234的博客 333

【学习笔记】详解换根法(换根DP)

【学习笔记】详解换根法(换根DP)

weq2011的博客 6245

Hadoop与Kafka集群部署与优化实践指南

分布式系统是现代大数据处理的核心架构,其中Hadoop作为分布式存储与计算框架,Kafka作为分布式消息队列系统,共同构成了实时数据处理的基础设施。通过HDFS实现海量数据存储,结合YARN进行资源调度,而Kafka则保障了数据流的实时传输与高吞吐。这种技术组合在电商用户行为分析、物联网数据采集等场景中表现卓越。部署过程中需关注硬件资源配置、关键参数调优以及集群监控方案,例如通过调整HDFS块大小和Kafka partition数量来优化性能。合理运用Flume、Spark Streaming等工具可实现系

weixin_29061997的博客 360

树形dp——换根dp

通过观察,我们发现,右边的深度减少了,左边的增加了,减少的节点为未换根之前以0为根节点经过2的所有路径上的节点,增加的为没有经过2的。我们假设某个节点为根,将无根树化为有根树,在搜索dfs统计子树的深度和,则可以用一次搜索算出以该节点为根时的深度和,其时间复杂度为。就表示为上升的深度,不经过child的子节点树都增加,不经过的节点数目就是从节点数目减去经过的节点数目。如图,我们的根节点就是0,接下来我们选取子节点2作为新的根节点,对其进行换根。但这样求解出的答案只是以该节点为根的,并不是最优解。

m0_74176921的博客 860

全15万字丨PyTorch 深度学习实践、基础知识体系全集;忘记时,请时常回顾。

本篇博客介绍的知识是——深度学习之PyThon框架基础。这是深度学习/神经网络的基础,多次回顾,会有不一样的感受。书读百遍,其义自见。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 5787

C++ Qt6 QtQuick/QML入门进阶与项目实战视频教程

C++ Qt这些年在PC客户端、嵌入式、汽车座舱仪表等领域应用很广泛,例如剪映专业版、微信4.0、亿图脑图、Steam、美图秀秀、腾讯会议、钉钉(部分模块)等都是使用C++ QWidget/QML开发。特别是QML这种声明式UI开发更加快捷,QML的界面开发效率相对于QWidget更快速,界面效果更好,QtQuick/QML在Qt6版本也逐渐完善了,使用QML进行客户端开发是个不错的选择。

琅嬛福地 4487

动态规划:(2):树形dp与换根dp

本文介绍了树形动态规划(DP)的基本概念和应用场景。首先通过一道热身题展示了树结构问题的解题思路,随后详细讲解了树形DP的实现方法,包括状态转移方程设计和递归求解过程。文章还介绍了换根DP技术,用于求解以所有节点为根的最优解问题,并通过例题演示了如何利用子树信息优化计算。最后,作者总结了树形DP的核心思想,并强调通过具体例题理解抽象算法的学习方法。全文以通俗易懂的方式呈现了树形DP的基本框架和典型应用。

jzoj_ylz的博客 1295

【NVIDIA-GB200-1】国内第一份生产环境实战安装配置教程,配置安装脚本,nvidia gb200配置教程-复制即用;gb200驱动安装

GB200 的高性能通信依赖。

jundao1997的专栏 705

JZOJ5776. 【NOIP2008模拟】小x游世界树

题目:【NOIP2008模拟】小x游世界树; 题目的附加题解给的很清楚,这里只给一个代码; 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6...

daxian3723的博客 164

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[jzoj 5776]【NOIP2008模拟】小x游世界树 (树形dp)

[jzoj 5776]【NOIP2008模拟】小x游世界树 (树形dp) 传送门 Description 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当他想前往阿瓦隆时发现那里只有圣诞节时才能到达,然而现在已经春天了,不甘心的他将自己的目的地改成了世界树,他耗费了大量的时...

Tricksterism 249

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

2018_9_23 模拟赛

今日比赛前言:JZOJ 5775 农夫约的假期题目分析代码JZOJ 5776 小x游世界树题目分析代码 前言: 感觉自己越来越渺小了 JZOJ 5775 农夫约的假期 题目 在一个平面,有nnn个点,找出一个点使nnn个点到该点的曼哈顿距离(∑abs(xi−xj)+abs(yi+yj))(\sum abs(x_i-x_j)+abs(y_i+y_j))(∑abs(xi​−xj​)+abs(yi​+...

lemondinosaur的博客 637

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【算法】换根DP

834. 树中距离之和。

小威的博客 1229

换 根 dp

1.首先 dfs1 得到每个节点子树的节点个数,然后得到dp[1](以1节点为根的答案),dp[子]=dp[父] - size[子] + n - size[子] 得到其相邻子节点的答案。2.假设以u为根节点的收益是dp[u],如果以v为根节点,对于以u为根,r染色v时收益增加n-size[v];2.设置sum数组:固定某个节点为根节点(比如下图以1为根节点),各节点到其子树所有节点的距离和,得到sum[1],就是dp[1]用下题引入换根dp:简而言之换根dp就是通过父节点的答案得到相邻子节点的答案。

2301_80275822的博客 403

树形dp--换根

换根dp 闲话:换根dp其实常见的还是挺简单的 ,之前学了两次都忘了,写篇总结留给下次忘了再看。 换根dp一般分为三个步骤 1、先指定一个根节点 2、一次dfs统计子树内的节点对当前节点的贡献 3、一次dfs统计父亲节点对当前节点的贡献并合并统计最终答案 P3478 [POI2008]STA-Station—入门题 本题是入门题,问的简单明了 ,哪个节点为根节点可以使深度之和最大。 思路: 1、先任意以一个节点为根节点跑一遍dfs1,记录需要的信息,本题需要去记录每个节点以节点1为根节点在树中包含自身的

一只大菜鸡的博客 912

树上dp之换根dp

换根dp是树上dp的一种我们在什么时候需要用到换根dp呢?当题目询问的属性,是需要当前结点为根时的属性,这个时候,我们就要使用换根dp换根dp的基本思路:假设题目询问的的属性为x通常我们会进行两次dfs第一次dfs,我们选取任意一个结点作为给出的无根树的根,对其进行dfs,并求出这个根的x,以及一些其他辅助数组(即节点与其子树的一些属性关系)第二次dfs,我们记dp[i]为对于结点i而言,节点i作为树的根时,我们要求的属性x。

Se_ren_di_pity的博客 1392

换根dp学习笔记

1.换根dp 换根dpdpdp其实是树形dpdpdp的一个分支,通常用来在线性或亚线性的复杂度里解决树上定点的问题 刚开始学习的时候可能会不太好理解,但是做多题之后就好了 2.引入 现在有一个这样的问题 给你一棵树,要找一个点ppp,使得当ppp为根的时候,所有节点的深度之和最大 首先考虑暴力怎么做,就是暴力枚举ppp,然后Θ(n)\Theta(n)Θ(n)计算答案,最后总复杂度是Θ(n2)\...

NephrenRuqInsania 828

换根 dp

那么就会出现重复计算的情况。注意:换根时要注意第一次。的部分,此时如果直接将。

m0_72761451的博客 740

【动态规划 & 树形DP】树的换根DP(换根DP模板)

树形 DP 中的换根 DP 问题又被称为二次扫描,通常不会指定根结点,并且根结点的变化会对一些值,例如子结点深度和、点权和等产生影响。所谓换根DP,就是基于原有的状态,通过相邻节点进行转换后,现有的状态仅仅只需要进行微小的变动即可达到完美相邻状态间的切换。通常需要两次 DFS,第一次 DFS 预处理诸如深度,点权和之类的信息,在第二次 DFS 开始运行换根动态规划。那么考虑完了两个根节点之间状态的转变,根相邻节点的状态应该如何变化?的相邻节点,这些点的树高状态并不会改变,读者可以自己思考。

Cauchy的博客 1527

树形|换根 DP总结

树形 DP,即在树上进行的 DP。由于树固有的递归性质,树形 DP 一般都是递归进行的。

skyflying266的博客 692

[洛谷 P3478 POI2008] STA-Station(换根dp 入门)

[洛谷 P3478 POI2008] STA-Station 题目链接 大致题意: 给定一个 n 个点的树,请求出一个结点,使得以这个结点为根时,所有结点的深度之和最大 一个结点的深度之定义为该节点到根的简单路径上边的数量 解题思路: 二次扫描与换根法 以1为根 以2为根 可以发现,2的子树(包括2)深度都减少了1,1的子树(包括1)深度都增加了1 定义状态方程 f[i]表示以i为根节点的所有结点的深度之和最大值 cnt[i]表示以i为根的子树的深度之和 如果v的父亲节点是u 那么f[v]=f[u

qq_49494204的博客 488
上一篇: 【JZOJ5775】农夫约的假期【模拟】
下一篇: 【HDU2586】How far away ?【LCA】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值