POJ 2152

2006陈启峰 - 消防站解题报告 2006陈启峰 - 消防站解题报告 poj 2152 fire 立即下载

陈启峰的论文题

这个树形dp还是比较难的,没有想到。

dp[i][j]表示以i为根的子树,i结点选j为负责站,所花的最少代价。

best[i]=min{dp[i][j] | 1<=j<=n}
当dis[i][j]>limit[i],dp[i][j]=∞
当dis[i][j]<=limit[i],dp[i][j]=cost[j]+sigma{min(best[child[i]],dp[child[i]][j]-cost[j])}

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1010
#define inf 0x3f3f3f3f
using namespace std;

int n,cost[N],limit[N],tim[N],dep,son[N];
int dis[N][N];
int dp[N][N],best[N];
int head[N],cnt;
struct Edge{
	int v,w,next;
}edge[N*2];

void init(){
	memset(head,-1,sizeof(head));
	memset(tim,0,sizeof(tim));
	cnt=dep=0;
}

void addedge(int u,int v,int w){
	edge[cnt].v=v;
	edge[cnt].w=w;
	edge[cnt].next=head[u];
	head[u]=cnt++;
	edge[cnt].v=u;
	edge[cnt].w=w;
	edge[cnt].next=head[v];
	head[v]=cnt++;
}

void init_dfs(int u,int fa){
	tim[u]=++dep;
	son[u]=1;
	for(int i=head[u];i!=-1;i=edge[i].next){
		int v=edge[i].v;
		if(v==fa)continue;
		init_dfs(v,u);
		son[u]+=son[v];
	}
}

void cal_dis(int u,int fa,int now){
	for(int i=head[u];i!=-1;i=edge[i].next){
		int v=edge[i].v;
		if(v==fa)continue;
		dis[now][v]=dis[now][u]+edge[i].w;
		cal_dis(v,u,now);
	}
}

void dfs(int u,int fa){
	for(int i=head[u];i!=-1;i=edge[i].next){
		int v=edge[i].v;
		if(v==fa) continue;
		dfs(v,u);
	}
	best[u]=inf;
	for(int j=0;j<n;j++){
		if(dis[u][j]<=limit[u]){
			dp[u][j]=cost[j];
			for(int i=head[u];i!=-1;i=edge[i].next){
				int v=edge[i].v;
				if(v==fa) continue;
				dp[u][j]+=min(best[v],dp[v][j]-cost[j]);  //当u选择j时,v不会选择j的父亲及往上更远的地方(因为选j是可以,而且更省,不用花那个更远节点的cost),
				//而v如果选择其子树之外的其他节点那一定不是最优的情况,通过取min操作会把它排除
			}
			if(tim[j]>=tim[u] && tim[j]<=tim[u]+son[u]-1)
				best[u]=min(best[u],dp[u][j]);
		}
		else dp[u][j]=inf;
	}
}

int main(){
	int T;
	scanf("%d",&T);
	for(int t=0;t<T;t++){
		init();
		scanf("%d",&n);
		for(int i=0;i<n;i++) scanf("%d",&cost[i]);
		for(int i=0;i<n;i++) scanf("%d",&limit[i]);
		for(int i=0;i<n-1;i++){
			int u,v,w;
			scanf("%d %d %d",&u,&v,&w);
			u--;v--;
			addedge(u,v,w);
		}
		init_dfs(0,-1);
		for(int i=0;i<n;i++){
			dis[i][i]=0;
			cal_dis(i,-1,i);
		}
		dfs(0,-1);
		printf("%d\n",best[0]);
	}
}


Mac版Burp Suite专业版破解与汉化完整指南 在Web安全测试领域,Java应用程序的许可证验证机制与本地化实现是常见的技术课题。其原理通常涉及Java Agent技术,通过在JVM启动时动态修改字节码,实现对软件授权状态的校验逻辑进行拦截与重写,从而绕过官方验证。同时,软件界面的国际化(i18n)与本地化(l10n)则依赖于资源文件的替换与加载。从技术价值角度看,深入理解这些机制不仅能满足特定场景下的工具定制需求,更能加深对Java安全机制、软件保护与逆向工程的理解。在实际的工程实践中,安全研究人员与开发者常面临功能受限或语言障碍的挑战,尤其是在渗透 阅读详情

相关推荐

使用ONNX Runtime在Java Web应用中部署深度学习模型

当应用场景需要集成深度学习模型进行推理时,直接在Java Web应用中集成深度学习框架可能会面临性能、兼容性等问题。为了将深度学习模型无缝集成到Java Web应用中,是一项广受认可且实用的方法。本篇文档将介绍如何将模型转换为ONNX格式,并通过ONNX Runtime Server进行部署,并通过Java Web应用调用以进行回归或预测任务。本方案的主要目标是实现以下功能:将PyTorch模型转换为ONNX格式。部署ONNX Runtime Server,加载ONNX模型并提供推理服务。

shysea2019的博客 8859

poj 2152 Fire (树形DP难题)

题目链接;https://vjudge.net/contest/246776#problem/C 题目大意:有n个城市,每两个城市只有一条路连接,(所以可以当成是一颗树)。现在要建设一些防火站,使每个城市都可以被覆盖。每个城市的属性是:在本城市建防火站的价钱和不在本城市建设的话,所依赖的别的防火站的最长距离。然后是n-1条路,和这条路的长度。现在问在覆盖所有城市的前提下的最少价格。 题目思路:...

qq_36782366的博客 412

手把手教你用STM32F303和LAN9252搭建EtherCAT从站(附IO/AD/DA完整代码)

本文详细介绍了如何使用STM32F303和LAN9252搭建EtherCAT从站,涵盖硬件选型、开发环境配置、协议栈移植及IO/AD/DA功能实现。通过实战指南和完整代码,帮助开发者快速掌握工业自动化中的实时通信技术,提升系统性能与可靠性。

weixin_26802933的博客 235

POJ-2152 树形dp

题意:给你一颗树,边上权值表示距离,一个点上可以建消防站,花费为val[i],一个节点要么建消防站,要么周围d[i]距离内必须有一个消防站,求最小花费。 想了好久没想到,看了一眼题解才恍然大悟。我真的是太菜了! 题解:设ans[u]为以u为根的这棵子树的答案,dp[u][v]表示u节点被v保护的答案,dis[v]表示u到v的距离。若v可以保护u,则 dp[u][v]=val[v]+∑min(dp...

XFire的博客 472

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 526

手把手教你学simulink(8.2)--simulink的实战案例:信号分析

通过以上步骤,你已经成功使用 Simulink 对信号进行了频谱分析和时域分析,提取了信号的有用信息。这个案例展示了如何创建 Simulink 模型、添加和连接模块、设置仿真参数、运行仿真以及分析结果。希望这个案例能帮助你更好地理解和使用 Simulink 进行信号分析。

MHD0815的博客 1124

poj 2152 一道很难的树型DP

题目:poj 2152  Fire          我想说的:以前做背包的题目做多了,脑子形成了一种就是所有动态规划就是在数组上进行等一些固定的思想。结果最近在做一些题目的时候,感觉无从下手,想好久都没结果。非常庆幸自己做了这类题目,让我从那种狭隘的思想中做出来。以后就要根据实际情况研究状态了。          题意:有n个城市,每两个城市只有一条路连接,(所以可以当成是一颗树)。现在要建

nyist_jiang 3365

刚体转动欧拉方程:从理论到卫星姿态控制的实践

刚体转动欧拉方程是描述刚体旋转运动的基本动力学方程,在卫星姿态控制、机器人学、航空航天等领域有着广泛应用。本文将详细讲解欧拉方程的物理概念、数学推导、数值计算方法,并重点分析其在卫星姿态控制系统中的具体应用。

ScilogyHunter的博客 644

POJ - 2152 Fire 树型DP

题目大意:有N座城市,要求在这N座城市中建一个消防系统,使得每座城市城市着火时都能被按时扑灭 现在给出每座城市建一个消防站所需的花费w和每座城市相邻消防站的最远距离lim(和该城市距离超过lim的城市的消防站无法救该城市的火),问要使所有的城市都能被救到火,建消防站的最小花费是多少解题思路:参考了别人的题解,果然还是太弱了。。。 要使该城市能被救到火,那么消防站不是建在该点,就是建在以该点为根的

静静地码 1121

电源防反接保护电路全攻略实战A04

本文深入剖析了硬件设计中电源保护电路的关键技术与实战经验。文章指出,保护电路虽小但至关重要,通过对比分析二极管与MOSFET防反接方案,揭示了MOSFET在效率、温控方面的优势。针对过压保护,重点讲解了TVS二极管选型要点,强调钳位电压而非击穿电压才是保护核心。文章结合工业案例(如48V通信模块烧毁、5V系统MOSFET过热等),详细阐述了PCB布局规范、热设计路径等工程细节,并提供了USB接口ESD防护的完整选型方案。最后强调硬件设计必须考虑最坏工况,在成本与性能间找到平衡点,避免因小失大。

启芯硬件的博客 778

Win11 系统下 VisualStudio2022 配置点云库 PCL1.11.1

安装完成之后打开文件夹E:\PCL 1.11.1\3rdParty\OpenNI2双击 并选择路径 (E:\PCL 1.11.1\3rdParty\OpenNI2) 安装即可全部安装完成之后,将pcl-1.11.1-pdb-msvc2019-win64.zip解压后的 .pdb文件拷贝到(E:\PCL 1.11.1\bin)中设置环境变量:到此,环境变量配置完成。

qq_53545309的博客 1127

[POJ2152]消防站解题报告

做这道题的时候,我一开始状态设计的太紧了,我设f(i)表示以i为根的子树自己搞定自己需要的最小代价,然后我枚举控制根的点。。然后发现转移是O(N^3)的。 看了论文之后发现其实改变一下状态就可以了,其实显然的一件事就是我们现在是在枚举两个点之间的关系了,那么我们不妨设f(i,j)为j控制i,且以i为根的子树都被完全搞定的最小代价;那么状态转移方程就呼之欲出了。 ①这道题告诉我最大的一点就是当我

TA 1140

地平线旭日X3开发板--使用Opencv显示CSI摄像头例程

但是从libsrcampy获取的摄像头图像格式是NV12,无法直接在opencv上显示或者处理,调试过程发现旭日派无法直接用opencv的VideoCapture()调用CSI摄像头,需要使用opencv来做开发的小伙伴可以做个参考,效果如下图所示。需要使用libsrcampy库来获取CSI摄像头图像,为了能够使用opencv的API来处理图像,需要增加NV12转化成bgr像素格式的函数。opencv显示图像.png。

bingdund的博客 541

POJ 2152 Fire

POJ 2152 Fire Description Country Z has N cities, which are numbered from 1 to N. Cities are connected by highways, and there is exact one path between two different cities. Recently country Z oft

CYCKCN的博客 518

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IMSL CNL 7.0.0 (x86-64)Crack

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

poj 2152 Fire - 经典树形dp

题目链接: http://poj.org/problem?id=2152 不多说。。  2006 陈启峰消防站解题报告 这dp简直是神了。。 #include #include #include #include #include #include #include #include #include #include #include #includ

呼,是出一口气;吸,是争一口气! 666

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

poj2152(Fire) 树形DP

题目链接:http://poj.org/problem?id=2152 题意:一棵带边权的树,边权表示节点间距离,在i上建立消防站的代价是w[i],如果在一点i没建消防站,那么它与距离这个点最近的消防站之间的距离不能大于d[i]。问满足建站最小的花费; 解法;看了陈启峰的论文才会的,感觉挺难的,不过论文里分情况讨论了,应该不需要;dp[i][j]表示在i处选择j处作为供应站(但是并不一

xiefubao的专栏 1039

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Fire (poj 2152 树形dp)

Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000)。现在要选择某些点,使得整棵树都被覆盖到。当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同时花费为v[i]。问最小花费。 以前做过一道类似的题(水库),这道题也差不多。首先来考虑,用\(best[i]\)表示以i为根的子树的最小花费。这样做有什么问题呢?它无法很好的处理消防站...

171

POJ 2152 Fire(树形DP)

题目链接:http://poj.org/problem?id=2152 题意: 思路:令F[i][j]表示 的最小费用。Best[i]表示以i为根节点的子树多有节点都找到负责消防站的最小费用。 int n,w[N],d[N]; vector&lt;pair&lt;int,int&gt; &gt; g[N]; int f[N][N],dis[N],best[N]; ...

weixin_34161029的博客 133

POJ2152 Fire 【树形dp】

题目链接 POJ2152 题解 经典老题,还真暴力 \(n \le 1000\),所以可以\(O(n^2)\)做 所以可以枚举每个点依附于哪一个点 设\(f[u]\)表示以\(u\)为根的子树的最小代价 \(g[u][v]\)表示\(u\)依附于\(v\)时以\(u\)为根的子树的最小代价 显然 \[f[u] = min\{ g[u][v] \}\] \[g[u][v] = cost[v] + \...

weixin_30389003的博客 133

poj 2152 Fire

Fire Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 883   Accepted: 403 Description Country Z has N cities, which are numbered from 1 to N. Cities are conne

记录成长的点点滴滴. . . . . 230

基于Visual C++的RPG游戏开发实战:从底层API到核心系统实现

游戏开发的核心在于理解其底层运行机制,其中游戏循环(Game Loop)是驱动一切逻辑与渲染的引擎心脏。它通过持续循环处理输入、更新状态和渲染画面,构成了实时应用的基础框架。在Windows平台下,深入掌握此原理离不开对Visual C++开发环境和原生Windows API的运用,这能帮助开发者夯实内存管理、系统编程及性能优化等硬核技能。通过数据驱动的设计模式,将游戏逻辑与资源、配置分离,可大幅提升项目的可维护性和扩展性。这种从底层构建的方式,尤其适用于角色扮演游戏(RPG)的开发,能让你透彻掌握从实体组

weixin_30701575的博客 337

点分小专题-[POJ1741][BZOJ2152][BZOJ2599]

UPD 2018.2.20 21:20 把BZOJ2599的第一种写法的坑填了,第二种写法现已无法通过 说在前面 没有什么好说的,但是要保持格式=w= 概述 说一下me对点分的拙见 点分呢,大概是用于处理树上的树链计数问题 其实简单的想,统计树上路径的时候,假设当前处理到了点u 对于当前点u,先dfs一遍统计出半条路径(从u到子树内的某个点),然后利用一些技巧,在O(siz)...

泉華子的OI足迹 460

【POJ2152】Fire

题目大意:给定一棵 N 个节点的无根树,点有点权,边有边权,现需要选出一个点集,满足树上任意一个点到该点集的距离不超过该点的给定值,求选出点集点权的最小值是多少。 题解:可以发现,对于以 i 为根的子树来说,i 点依赖的点很有可能并不是 i 内部的节点,转移比较麻烦。考虑开两个数组 f[], g[][],分别表示以 i 为根的子树满足上述条件的最小权值和以 i 为根的子树中,i 号节点依...

K1385170的博客 389

poj 2152

消防站题目描述:有n个城市,每两个城市只有一条路连接,(所以可以当成是一颗树)。现在要建设一些防火站,使每个城市都可以被覆盖。每个城市的属性是:在本城市建防火站的价钱和不在本城市建设的话,所依赖的别的防火站的最长距离。然后是n-1条路,和这条路的长度。现在问在覆盖所有城市的前提下的最少价格。题解:很难的一道题,但是很巧妙.思维分好几个步骤:首先是题意的放松条件,我们不去追求真正的最近,因为兄弟节点会

ruclion的专栏 573

poj1741 bzoj2152

树分治入门 poj1741是男人八题之一,经典的树分治的题目这里用到的是点分治核心思想是我们把某个点i作为根,把路径分为过点i和不过点i先统计过点i这样的路径数,然后在统计其子树中的答案,这样就不断地划分成规模较小子问题。要使划分最优,我们每次都选的是树的重心 1 type node=record 2 len,next,po:longint; 3 ...

weixin_34259232的博客 106
上一篇: 极大极小搜索+alpha_beta剪枝)
下一篇: 再见了acm
Benzema67
博客等级 码龄15年 120粉丝 357原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值