P3959 [NOIP 2017 提高组] 宝藏 题解

news/2025/9/23 15:40:24/文章来源:https://www.cnblogs.com/-xpigeon-/p/19107329

link

题目要求任选图中一点为根,通过拓展道路最终形成一棵树,使得代价总和最小,代价受深度和边权两个因素影响。
容易想到一种爆搜,任选一点为根,每次扫描已选点来不断尝试拓展道路,但这样做太蛋疼了,我们尝试优化。

此时一看数据范围 \(n\le12\),考虑把思路往状压 \(dp\)上引导或寻找类似做法,我们发现:

  1. 在最终形成的树中,同一深度的点不受拓展先后顺序的影响,也就是说我们可以尝试一次性拓展同一深度的点。
  2. 对于已连通的点集 \(s\),我们不关心它的具体形态,只需保证其代价最小,因为在后续拓展中的代价与 \(s\) 的形态无关。

这样的条件启发我们可以 “深度” 为阶段,“点集” 为状态尝试设计 \(dp\)

\(dp\) 状态 \(f_{i,s}\) 为当前拓展到深度 \(i\),状态为 \(s\) 的点均连通时的最小代价,转移方程如下:

\[f_{i,s}=\min_{s \in z 且新点均与 z连通} \{f_{i-1,z} +(i-1)\times cost(z,s) \} \]

其中转移条件 \(s\in z\) 意味着新的一层只能打通原来没有的点,这时就需要用到子集枚举的手段,这样做时间复杂度是 \(O(3^n)\) 的。

\(cost(z,s)\) 表示从旧状态到新状态的代价,这个可以通过预处求得。

最终一层枚举起点,一层枚举深度,再加上子集枚举 \(dp\) 总时间复杂度是 \(O(n^2 3^n)\) 的,可以通过本题。

点击查看代码
const int N=15;
const int M=1<<12;
const int inf=0x3f3f3f3f;
int cost[M][M],n,m,e[N][N];
ll f[N][M],ans=inf;
void init(){for(int s=1;s<(1<<n);s++){   //当前层for(int z=s;z;z=(z-1)&s){//上一层为其子集,保证都是新点转移过来if(s==z) continue;for(int i=0,tmp=inf;i<n;i++,tmp=inf){    //枚举新点if(!( ((s^z)>>i) &1)) continue;for(int j=0;j<n;j++) if((z>>j)&1) tmp=min(tmp,e[j][i]); //选择最短边if(tmp>=inf){cost[z][s]=inf;break;}else cost[z][s]+=tmp;    }}}
}
ll DP(int x){memset(f,0x3f,sizeof(f));f[0][1<<x]=0;//初始免费边ll res=inf;for(int i=1;i<n;i++){for(int s=1;s<(1<<n);s++){for(int z=s;z;z=(z-1)&s){if(s==z) continue;f[i][s]=min(f[i][s],f[i-1][z]+1ll*i*cost[z][s]);}if(s==(1<<n)-1) res=min(res,f[i][s]);}}return res;
}
void xpigeon(){rd(n,m);if(n==1){cout<<0<<'\n';return ;}memset(e,0x3f,sizeof(e));for(int i=0;i<n;i++){e[i][i]=0;}for(int i=1,u,v,w;i<=m;i++){rd(u,v,w);u--,v--;e[u][v]=e[v][u]=min(e[u][v],w);}init();for(int i=0;i<n;i++) ans=min(ans,DP(i));cout<<ans<<'\n';
}
signed main() {ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);xpigeon();return 0;
}

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

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

相关文章

(二)若依前后端分离版本二次开发 代码生成、目录添加、数据字典维护

(二)若依前后端分离版本二次开发 代码生成、目录添加、数据字典维护一 摘要 主要介绍添加目录、菜单、代码自动生成等功能。 二 目标 2.1 掌握添加目录,菜单 2.2 掌握添加数据字典 2.3 掌握代码生成 三 实施 已标签…

C#与Access数据库操作简易指南:增删改查及类封装

简介:C#是面向对象的编程语言,常用于Windows应用开发,而Microsoft Access是一种数据库管理系统。本教程指导如何结合C#操作Access数据库进行基本的增删改查(CRUD)操作,使用ADO.NET通过OLEDB类连接和操作数据库。…

对之前部署hbase总结

部署路程为看黑马大数据视频 部署直到yarn集群部署之后看尚硅谷的视频完成部署即可 之后参考有可能会报错直接复制报错到csdn即可 启动代码和停止指令: 注意每次启动检查每一个主机启动是否完成 慢一些 否则会报错

网站排版图片网站禁止右键

一、前言 在大多数传统的web系统中&#xff0c;使用Redis一般都是作为缓存使用&#xff0c;在大数据查询时作为缓解性能的一种解决方案。博主的的系统中使用Redis也主要使用到缓存的作用&#xff0c;还有做了注册中心&#xff0c;分布式事务。其他的强大的功能&#xff0c;没有…

书画工作室网站模板网站建设做vip视频网站赚钱吗

在K8s中&#xff0c;创建Pod时的流程如下&#xff1a; 用户通过Kubectl或其他方式向API Server发送创建Pod的请求。API Server接收到请求后&#xff0c;会先进行权限验证和身份认证。一旦验证通过&#xff0c;API Server会将请求转发给Scheduler组件。Scheduler负责对新创建的…

网站自动更新时间代码网站域名和空间费用

网站地址&#xff1a;网络游戏防沉迷实名认证系统 PHP代码&#xff1a; 创建对应文件&#xff0c;在需要的位置get传参请求即可&#xff0c;具体参数参考 网络游戏防沉迷实名认证系统接口对接技术规范v2.0 1、上传信息 <?php $url "https://wlc.nppa.gov.cn/test…

百度推广要自己建站吗做网站需要公章吗

我们使用redis时发现yaml配置中的redis相关配置不生效&#xff0c;后面发现将配置修改甚至删除所有相关redis的配置&#xff0c;springboot依然能使用redis里面默认的db0并且不报错。上网查阅了一些文章&#xff0c;也都没有解决今天分享下&#xff0c;我的处理方法, SpringBo…

做网站关键词加到什么位置彩票网站如何建设

alist-org/alist Stars: 35.6k License: AGPL-3.0 alist 是一个支持多存储的文件列表/WebDAV 程序&#xff0c;使用 Gin 和 Solidjs。 该项目的主要功能、关键特性、核心优势包括&#xff1a; 支持多种存储方式易于部署和开箱即用文件预览&#xff08;PDF、markdown、代码等&…

做外贸用什么网站好台州 网站建设

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就赢了&#xff0c;输家罚一杯酒。两人同赢或两人同输则继续下一轮&…

站点推广是什么意思企业网络设计方案论文

头文件介绍 axftmp1.h 是收集类模板(MFC模板类)的头文件&#xff0c;倘若你在程序中用到了CArray, CObList等数据结构时&#xff0c;那么就得加载该文件。通常在MFC编程中&#xff0c;为了使用集合、数组类&#xff0c;要在StdAfx.h中加入下面语句&#xff1a;#include <afx…

怎么在qq上自己做网站国内响应式网站

一种获取Linux虚拟机内部日志的方法【技术领域】[0001]本发明涉及云计算管理技术领域&#xff0c;特别是指一种获取Linux虚拟机内部日志的方法。【背景技术】[0002]在云计算环境下&#xff0c;虚拟机被广泛使用&#xff0c;对于虚拟机的维护要求越来越高&#xff0c;当虚拟机出…

哪个网站开发好网站的集约化建设

近年来&#xff0c;我们已经看到了大数据的成功应用&#xff0c;但根据研究&#xff0c;只有20&#xff05;的员工能够真正的使用BI工具。此外&#xff0c;由于在统计思维方面缺乏培训且图表和图表形式的数据不是很清晰&#xff0c;决策者往往会出现误解和决策失误。而这背后的…

深入解析:分享一个完整的uniapp车牌号输入组件

深入解析:分享一个完整的uniapp车牌号输入组件2025-09-23 15:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

国产 CAD 新选择!NanoCAD 24.0:全功能 DWG 支持 + 3D 建模优化,多领域设计效率拉满

​ ​在建筑、机械、电气等设计领域,CAD 软件的兼容性、功能性与操作流畅度直接影响工作效率。今天给大家推荐一款国产专业级 CAD 工具 ——NanoCAD 24.0,不仅完美适配 64 位 Windows 全系列系统(Win7/8/10/11),更…

java 框架mybatis_01(

参考地址,https://mybatis.p2hp.com/getting-started.html

扣子Coze智能体实战:自动采集1000条小红书爆款笔记 ,自动写入飞书多维表格

大家好,我是汤师爷,专注AI智能体分享,致力于帮助100W人用智能体创富~ 想要抓取小红书热门笔记,但一个个复制太耗时? 需要批量获取热门笔记数据,进行分析,却苦于没有高效的工具? 今天,我将为大家介绍一个超强的…

网站如何做成app建设二手商品网站总结

2016-2017-2 《Java程序设计》课程学生博客和代码托管链接 博客 1552 20155201 李卓雯20155202 张 旭20155203 杜可欣20155204 王 昊20155205 郝博雅20155206 赵 飞20155207 王雪纯20155208 徐子涵20155209 林虹宇20155210 潘滢昊20155211 解雪莹20155212 江振思20155213 陆忠民…

【CVCVCV】dataloader报错RuntimeError: Caught RuntimeError in DataLoader worker process 0

【CVCVCV】dataloader报错RuntimeError: Caught RuntimeError in DataLoader worker process 0Posted on 2025-09-23 15:34 SaTsuki26681534 阅读(0) 评论(0) 收藏 举报参考文献 https://blog.csdn.net/SHY0978/a…

成品网站1688入口网页版怎样攀枝花城市建设网站

文章目录 一、前言二、硬件1.引脚说明2.原理图 三、软件1.IIC读写函数1.1 读函数1.2 写函数 2.初始化2.1 检测设备是否存在2.2 读取LSM6DS3TRC器件ID2.3 LSM6DS3TRC重启&#xff0c;重置寄存器2.5 LSM6DS3TRC设置块数据更新2.6 LSM6DS3TRC设置加速度计的数据采样率2.7 LSM6DS3T…

道滘镇仿做网站怎样做化妆品网站

本系列文章描述了离线环境下以 UPI (User Provisioned Infrastructure) 模式安装 Openshift Container Platform (OCP) 4.4.5 的步骤&#xff0c;我的环境是 VMware ESXI 虚拟化&#xff0c;也适用于其他方式提供的虚拟机或物理主机。离线资源包括安装镜像、所有样例 Image Str…