UVa12093 Protecting Zonk

【题解】UVa 12093 Protecting Zonk UVa传送门 洛谷RemoteJudge传送门 题目大意:给定一个nnn(n≤10000n≤10000n \leq10000)个结点的无根树。有两种装置AAA和BBB,每种都有无限多个。 在某个结点XXX安装AAA需要C1C1C1的花费,并且此时与结点XXX相连的边都被覆盖。 在某个结点XXX安装BBB需要C2C2C2的花费,并且此时与结点XXX相连的边和与XXX相连的点的边都会被覆盖。 ... 阅读详情

        题意:给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个。在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖。在某个节点X使用B装置需要C2的花费,并且此时与节点X相连的边以及与X相连的点相连的边都被覆盖。求覆盖所有边的最小花费。

        思路:树型dp。随便拿一个点当作树根,dp(i,j,k),i代表节点号,j代表选择装置的类型,k代表覆盖状态,数组存该状态下最小花费。其中j=0:不部署装置,j=1:部署A装置,j=2:部署b装置。k=0:当前节点与父节点连接的边没有覆盖,k=1:覆盖了当前节点与父节点连接的边,k=2:覆盖了当前节点与父子节点连接的边,k=3:覆盖了当前节点与父节点,子孙节点连接的边。


#include <iostream>    
#include <stdio.h>    
#include <cmath>    
#include <algorithm>    
#include <iomanip>    
#include <cstdlib>    
#include <string>    
#include <memory.h>    
#include <vector>    
#include <queue>    
#include <stack>    
#include <map>  
#include <set>  
#include <ctype.h>    
#define INF 10000000
#define ll long long
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define MAXN 100010

using namespace std;  

vector<int> E[10010];
int dp[10010][3][4];
int n,c1,c2;

inline int fun(int u,int f,int type,int statu){
	if(dp[u][type][statu]!=-1)return dp[u][type][statu];
	
	int re=0;
	
	if(statu==0){
		re=INF;
		int tmp=0;
		for(int i=0;i<E[u].size();i++){
			if(E[u][i]==f)continue;
			tmp+=min3( fun(E[u][i],u,0,1) , 
			          fun(E[u][i],u,1,2) ,
					  fun(E[u][i],u,2,3) );
		}
		for(int i=0;i<E[u].size();i++){
			if(E[u][i]==f)continue;
			re=min(re,tmp-min3( fun(E[u][i],u,0,1) , 
			          fun(E[u][i],u,1,2) ,
					  fun(E[u][i],u,2,3) )+fun(E[u][i],u,2,3));
		}
		
	}else{
		for(int i=0;i<E[u].size();i++){
			if(E[u][i]==f)continue;
			re+=min3( fun(E[u][i],u,0,statu-1) , 
			          fun(E[u][i],u,1,2) ,
					  fun(E[u][i],u,2,3) );
		}
		
		int tmp=0;
		for(int i=0;i<E[u].size();i++){
			if(E[u][i]==f)continue;
			tmp+=min3( fun(E[u][i],u,0,1) , 
			          fun(E[u][i],u,1,2) ,
					  fun(E[u][i],u,2,3) );
		}
		for(int i=0;i<E[u].size();i++){
			if(E[u][i]==f)continue;
			re=min(re,tmp-min3( fun(E[u][i],u,0,1) , 
			          fun(E[u][i],u,1,2) ,
					  fun(E[u][i],u,2,3) )+fun(E[u][i],u,2,3));
		}
	}
	if(type==1)re+=c1;
	if(type==2)re+=c2;
	dp[u][type][statu]=re;
	return re;
}


int main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	while(cin>>n>>c1>>c2){
		if(n==0&&c1==0&&c2==0)break;
		memset(dp,-1,sizeof(dp));
		for(int i=1;i<=n;i++)E[i].clear();
		//
		int u,v;
		for(int i=1;i<n;i++){
			cin>>u>>v;
			E[u].push_back(v);
			E[v].push_back(u);
		}
		int ans=min3( fun(1,-1,0,1) , fun(1,-1,1,2) , fun(1,-1,2,3)  );
		cout<<ans<<endl;
	}
	return 0;
}


工业场景落地:Java+PaddleOCR实现高性能OCR文字识别的终极方案 本文深度解析基于Java的高性能工业级OCR实现方案,集成PP-OCRv5深度学习模型,提供: ✅ 多场景支持:手写体、竖排文本、票据表格的精准识别 ✅ 工业级性能:毫秒级响应,支持GPU加速与高并发处理 ✅ 开箱即用:通过Maven快速集成,5行代码完成文字识别 ✅ 完整技术栈:覆盖文本检测、方向校正、识别后处理全流程 附可运行示例代码,助您快速构建企业级OCR系统! 阅读详情

相关推荐

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

UVA - 12093 Protecting Zonk(树形DP经典难题)

传送门 时隔两个多月前来补题,这题真的有点难搞(吐槽= =) Reference: https://www.luogu.com.cn/problem/solution/UVA12093题解第二篇 https://www.cnblogs.com/djh0709/p/9606749.html 首先看到题目,不难发现对于某个节点,两种装置的影响如下图所示: 其中分别用英文缩写代表了祖父,父亲,兄弟,当前节点uuu,儿子,孙子。这已经是影响的最大范围了 但是我们考虑到编程难度,树形DP不就是在树上dfsdfsd

Happig的博客 436

手把手教你用ComfyUI搭建高效AI绘画工作流:从基础到高级技巧

本文详细介绍了如何使用ComfyUI构建高效的AI绘画工作流,从基础配置到高级技巧全面覆盖。通过模块化设计,ComfyUI显著提升显存利用率和创作灵活性,适合从新手到专业用户。文章包含部署指南、工作流搭建、性能优化及行业应用案例,帮助读者快速掌握AI绘画核心技术。

7up55的博客 719

UVa12093

来自luogu的https://www.luogu.org/problemnew/solution/UVA12093 的第二个题解,感谢! 下面是我的思路,参考了博客,建议读博客,我的随便。 // UVa 12093 /* 通过读题就能发现这道题是一道树上的动态规划的问题,与UVa1218(完美的服务)有着相似之处, 所以主要的思路就是将父结点与子结点的关系找出...

weixin_30820151的博客 190

星网宇达Newton-M2设备安装及配置

主要介绍了星网宇达Newton-M2设备的配置过程

weixin_49353445的博客 2676

波束形成算法:LCMV实现(MATLAB)

阵列信号处理,波束成形,

weixin_43601588的博客 1万+

Protecting Zonk UVA - 12093 (树dp)

题目链接:点击打开链接 题目思路:这道题真的明知道是到dp,但是定义状态也难,转移也难,决策也难,太菜。这道题网上有一个用标准树dp写的写法,但是我觉得太巧妙,比较难想,所以不打算采用那种写法。对于这道题来说最难处理就是b的那个装置,如果是只有a的话,无疑就是一道非常傻逼的题,但是多了b这个条件,有点难处理,那么这道题的切入点在哪呢,我们可以分析到,对于某一个节点来说如果它与它的父节点的某一条边

w571523631的博客 478

学术版GPT安装教程——保姆版(附带原生GPT注册教程)

学术版GPT图文安装教程

DBenD的博客 2万+

UVA - 12093 Protecting Zonk (较难树形DP)

题目链接:https://vjudge.net/problem/UVA-12093 题意: 有n个城市和n-1条路组成了一个树,现在有花费为c1的机器人A和花费为c2的机器人B,两种机器人都是无限量的,如果在城市u放置机器人A,此时与u连接的边都会被覆盖,如果在城市u放置机器人B,那么与u相连的边都会被覆盖,且与u相连的点所相连的边也会被覆盖,现问将所有道路都覆盖所需最小花费。 思路:这题状...

weixin_30924239的博客 166

YOLOv13保姆级教程+AKConv模块:可变形卷积+自适应核优化,mAP提升3.23%,召回率&mAP50~95显著提升(论文涨点模块已验证)

本文介绍了一种改进的YOLOv13-AKConv模型,通过引入AKConv模块显著提升了目标检测性能。实验结果表明,优化后的模型(绿色曲线)相比原模型(蓝色曲线)在mAP指标上提升了3.23个点,同时召回率、mAP50-95等指标均有明显提升。作者详细阐述了模型移植过程,包括创建yolov13-AKConv.yaml配置文件,修改tasks.py和modules/init.py文件,以及实现AKConv模块的核心代码。该模块采用可变形卷积思想,通过动态生成采样点位置来增强特征提取能力,并集成了BN和SiLU

FJN110的博客 2611

Python爬虫实战:微信小程序内容采集的全面指南

在移动互联网时代,微信小程序已成为企业和个人提供服务的重要渠道。小程序中包含了大量有价值的信息,但微信官方并未提供便捷的数据获取接口。本文将详细介绍如何使用Python爬虫技术采集微信小程序内容,包括最新技术方案、完整代码实现以及应对各种反爬机制的策略。小程序运行在微信封闭环境中,无法直接访问数据通信主要通过HTTPS加密传输内容动态加载,依赖JavaScript渲染微信有严格的反爬机制。

2201_76125261的博客 3117

uva 12093 Protecting Zonk(在某个节点X使用A装置,此时与节点X相连的边都被覆盖)

题意: 有一个n(n<=10000)个节点的无根树。有两种装置A,B,每种都有无限多个。 1.在某个节点X使用A装置需要C1(C1<=1000)的花费,并且此时与节点X相连的边都被覆盖 2.在某个节点X使用B装置需要C2(C2<=1000)的花费,并且此时与节点X相连的边以及与节点X相连的点相连的边都被覆盖 求覆盖所有边的最小花费 思路: dp[u][0]:u没有安装

_zidaoziyan的博客 1106

redhawk:使用rh_setup.pl产生gsr模板

必须加的option工具会在rh_setup.pl给出提示,按照要求填写即可,另外工具会把所有填写的输入文件和信息放到rh_setup.init文件中,拷贝这个文件可在任何平级运行目录下,直接rh_setup.pl产生gsr以及run sta/dyn/em的脚本。rhsetup.pl -top top_cell_name -vdd_nets VDD 1.2 VDD2 1.2 -vss_nets VSS -frequency 100e6 (100m是默认值)更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 1055

UVa 12093 Protecting Zonk

本文研究了在树形结构村庄中放置两种守卫机器人(士兵和中士)的最小成本问题。通过动态规划方法,定义了四种状态来精确描述节点与父节点间的覆盖关系。状态转移考虑了机器人覆盖范围的不同特性,确保所有道路被保护的同时最小化总成本。算法采用树形DFS遍历,时间复杂度为O(N),适用于大规模输入。样例测试验证了方法的正确性和高效性。

寂静山林 990

VC中sqlite的使用

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

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

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

【UVa】【DP】12093 Protecting Zonk

UVa 12093 Protecting Zonk 题目 ◇题目传送门◆(由于UVa较慢,这里提供一份vjudge的链接) ◇题目传送门(vjudge)◆ 题目大意 有NNN个节点构成一个树形结构的图。现有两种机器A,B。A的花费为C1C1C_1,B的花费为C2C2C_2。若在某个节点上放一个A机器,则与该节点相连的边被覆盖;若在某节点上放一个B机器,则与该节点相连的边及其相邻节点相连的...

IDDFS 301

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Uva 12093】Protecting Zonk

【Link】: 【Description】 n个节点的树; 每个节点都可以选择3种 1.覆盖和它相连的边; c1花费; 2.覆盖和它相连的边以及和它相连的点相连的边; c2花费; 3.不进行操作 覆盖所有的边的最小花费; 【Solution】 /* n个节点的树; ...

AWCXV 76

Uva 12093 Protecting Zonk

一道动态规划的题目,首先要利用DFS将无根树变为有根树。然后从根开始,这个时候就可以分为两种情况来进行考虑:第一种情况是与根相连接的子节点中至少有一个子节点使用的是B装置,第二种情况是与根节点相连接的所有子节点使用的都不是B装置,对于第一种情况,首先递归算出所有的子节点的最小代价之和,然后对于每一个子节点,都尝试去除当前最优的放置方案,强制放置一个B装置得到的新的代价之和,求出所有的新的代价之和的

zju2016的博客 382

UVA - 12093 Protecting Zonk 树状DP

问题 问题就是在一个无根树上,每个点可以放置一个机械,机械有两种C1,C2,C1可以覆盖放置点直接连接的边,C2可以覆盖放置点和相邻点所连接的边,他们的费用不同,问怎么放的代价最小 分析 开始的思路: 这题是树状DP, 如果直接将点u放置的机械种类作为状态,dp[u][0,1,2]分别代表点u不放置,放C1,放C2,的不同状态,1作为DFS开始的节点,会有一些问题(主要是两个),无法解决1-2-3...

zpf1998的博客 146

uva 12093 Protecting Zonk 树形dp

题目大意:有n个城市和n-1条路组成了一个树,现在有花费为c1的机器人A和花费为c2的机器人B,两种机器人都是无限量的,如果在城市u放置机器人A,此时与u连接的边都会被覆盖,如果在城市u放置机器人B,那么与u相连的边都会被覆盖,且与u相连的点所相连的边也会被覆盖,现问将所有道路都覆盖所需最小花费 dp[u][0] :以点u为根的子树下的边全部被覆盖,且没有向u节点上方覆盖 dp[u][

KIDGIN7439的专栏 638

Protecting Zonk UVA - 12093 树形DP

题意:  给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个。在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖。在某个节点X使用B装置需要C2的花费,并且此时与节点X相连的边以及与X相连的点相连的边都被覆盖。求覆盖所有边的最小花费。树形DP的题目写多了后这种模板题还是很好想的。。 然而我写(智)的(商)不(捉)多(鸡) 想了一会 想出了个及其复杂的状态转移方程。

lifelike 400

【UVA12093】Protecting Zonk (树形DP)

题意:   给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个。在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖。在某个节点X使用B装置需要C2的花费,并且此时与节点X相连的边以及与X相连的点相连的边都被覆盖。求覆盖所有边的最小花费。 分析:   首先无根树可以先dfs确定根。考虑选择装置A和装置B的影响。   装置A只会影响节点u连出去的...

weixin_30550081的博客 64

Uva-12093 Protecting Zonk(较复杂的树形DP)

题意:给定一个有n(n 在某个节点x使用A装置需要C1(C1 在某个节点X使用B装置需要C2(C2 求覆盖所有边的最小花费. 分析:状态有很多种表示方法,f[u][a][b][c] 表示第i个点选了a装置,他父亲选了b装置,c表示它的儿子中是否有选C2装置,或者f[u][a][b][c]表示第i个点选了a装置,他父亲选了b装置,c表示u到fa[u]的边是否被u上边的点覆盖,这

WZJRJ28 443

uva - 12093(树形dp)

就该题目而言,对状态的限定是非常重要的,先找到合适的状态涵盖所有的因素才能为状态转移打下铺垫。 首先,来谈制约因素,该题目的状态必须表示父,子,孙三代边的的覆盖状态,这是为什么,当前节点已经决策,往下走对子节点决策,而子节点最多会覆盖父,子,孙,曾孙,四代边,那么转移到子节点,就至少描述下面三代的覆盖情况。 状态为 0 : 父边点没被覆盖      1 : 父边被覆盖       2

playwfun的专栏 903

ZMQ Arena 实战:ZeroMQ/ZMTP 多语言绑定与传输方式基准测试指南

消息队列是分布式系统中解耦与异步通信的核心组件,而性能评估则决定了中间件选型与调优的方向。在不同语言绑定、传输协议和消息模式下,吞吐量与延迟的差异往往来自底层协议栈实现,而非业务逻辑。ZeroMQ 作为轻量级高性能消息库,其通信语义基于 ZMTP 协议,不同实现的性能表现需要可重复的基准测试来量化。ZMQ Arena 正是为应对这一需求而设计的基准测试工具,它支持多语言绑定、多种传输方式(TCP、IPC、inproc)及消息模式,帮助开发者在选型、参数调优和版本升级回归中获取可靠数据。通过统一配置消息大小、

468
上一篇: UVa1218 Perfect Service
下一篇: UVa1252 Twenty Questions
squee_spoon
博客等级 码龄14年 61粉丝 455原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值