当前位置: 首页 > news >正文

题解:洛谷 P1364 医院设置

【题目来源】

洛谷:P1364 医院设置 - 洛谷

【题目描述】

设有一棵二叉树,如图:

image

其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为 \(1\)。如上图中,若医院建在 \(1\) 处,则距离和 \(=4+12+2\times20+2\times40=136\);若医院建在 \(3\) 处,则距离和 \(=4\times2+13+20+40=81\)

【输入】

第一行一个整数 \(n\),表示树的结点数。

接下来的 \(n\) 行每行描述了一个结点的状况,包含三个整数 \(w, u, v\),其中 \(w\) 为居民人口数,\(u\) 为左链接(为 \(0\) 表示无链接),\(v\) 为右链接(为 \(0\) 表示无链接)。

【输出】

一个整数,表示最小距离和。

【输入样例】

5						
13 2 3
4 0 0
12 4 5
20 0 0
40 0 0

【输出样例】

81

【算法标签】

《洛谷 P1364 医院设置》 #动态规划DP# #树形数据结构# #广度优先搜索BFS# #最短路# #树的重心#

【代码详解】

#include <bits/stdc++.h>
using namespace std;
const int N = 105, M = N * 2;  // 定义常量,N: 最大节点数,M: 最大边数
int n, w[N], u, v, ans = 1e9, sum, dep[N];  // n: 节点数, w: 节点权重, ans: 最小总代价
int h[N], e[M], ne[M], idx;  // 邻接表存储树
void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx++;  // 添加无向边
}
// DFS计算深度
void dfs(int u, int fa)  // u: 当前节点, fa: 父节点
{if (fa)  // 如果有父节点dep[u] = dep[fa] + 1;  // 当前节点深度 = 父节点深度 + 1for (int i = h[u]; i != -1; i = ne[i])  // 遍历当前节点的所有邻接点{int j = e[i];  // 邻接节点jif (j == fa) continue;  // 如果是父节点,跳过dfs(j, u);  // 递归遍历子节点}
}
int main()
{memset(h, -1, sizeof(h));  // 初始化邻接表cin >> n;  // 输入节点数// 输入每个节点的权重和子节点for (int i = 1; i <= n; i++){cin >> w[i] >> u >> v;  // 权重, 左子节点, 右子节点if (u)  // 如果有左子节点add(i, u), add(u, i);  // 添加双向边if (v)  // 如果有右子节点add(i, v), add(v, i);  // 添加双向边}// 尝试每个节点作为根for (int i = 1; i <= n; i++){sum = 0;  // 重置总代价memset(dep, 0, sizeof(dep));  // 重置深度数组dfs(i, 0);  // 以i为根进行DFS,计算各节点深度// 计算以i为根的总代价for (int j = 1; j <= n; j++)sum += w[j] * dep[j];  // 代价 = 权重 × 深度ans = min(ans, sum);  // 更新最小代价}cout << ans << endl;  // 输出结果return 0;
}

【运行结果】

5
13 2 3
4 0 0
12 4 5
20 0 0
40 0 0
81
http://www.jsqmd.com/news/390184/

相关文章:

  • 2026年球球大作战知名主播推荐排行:新老顶流谁主沉浮? - 资讯焦点
  • C#中ConcurrentDictionary的AddOrUpdate/GetOrAdd的并发问题
  • 智慧农业中的提示系统:提示工程架构师如何处理用户反馈?
  • 题解:洛谷 P4913 【深基16.例3】二叉树深度
  • 好累
  • 2026年成都市成华区口腔医院推荐:本地人公认的“排名前五”榜单! - 资讯焦点
  • AI“智力黑洞”:让大模型变聪明的实用避坑指南
  • F. Parabola Independence
  • 小白程序员必看:大模型行业应用入门与未来机遇
  • 2026年AI大模型的发展如何影响我们的生活、工作效率及未来的职业发展
  • 详细介绍:JVM篇5:编译和解释的区分 + 区分堆栈的好处 + 垃圾回收期的选择
  • 除甲醛哪个牌子好 2026 三款长效除醛产品专业测评与场景化方案 - 资讯焦点
  • 大模型时代:数据标注从“流水线”到“专家岗”,小白也能收藏的进阶指南!
  • 小白/程序员入门大模型:阿里Qwen3.5系列详解与学习清单
  • AI去中心化系统设计:如何实现跨链互操作性?
  • 大模型与AI:从历史到应用,小白也能看懂的未来革命(收藏版)
  • 掌握LLM应用工程:从Prompt到MCP,小白也能轻松入门并收藏这趟学习之旅!
  • 2026春晚大揭秘:AI大模型重塑舞台,小白程序员必看收藏版!
  • Linux 完全卸载 MySQL
  • 语言模型推理能力的跨文化适应性评估研究
  • 大模型幻觉:定义、成因与项目开发中的规避方法
  • AI大模型真的能把很多人的工作替代掉吗?大模型AI如何改变工作?提升技能的必备指南
  • 掌握分块策略:提升RAG应用准确性的关键步骤(收藏版)
  • 题解:洛谷 P2058 [NOIP 2016 普及组] 海港
  • Shell printf 命令
  • 题解:洛谷 P1996 约瑟夫问题
  • Mac mini 带回老家,打算用远程控制,第一次开机我傻眼了
  • 2026硅酸钾领域佼佼者:盘点几家实力企业,硅微粉/石英粉/铸石粉/石英砂/石墨粉/玻璃纤维布,硅酸钾生产厂家哪家好 - 品牌推荐师
  • AI率失真:为什么你永远测不出一段文字是不是AI写的
  • 2026年专业的保健品品牌选哪家?看这篇就懂,保健品/保健饮品/养胃颗粒,保健品品牌选哪家 - 品牌推荐师