题目选自洛谷P1364

从指定结点开始,使用DFS,对于某个结点来说,搜索的深度就是源点到这个结点的距离,单点贡献(该点所有居民到医院的距离之和)就是源点到这个结点的距离乘上该点的居民数量;然后加上自己的父结点和左右子结点的贡献,并返回统计的和。这里vis数组保证每个结点只统计一次。

题目描述

设有一棵二叉树,如图:

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

输入格式

第一行一个整数 nn,表示树的结点数。

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

输出格式

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

输入输出样例

输入 1

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

输出 1

81

说明/提示

数据规模与约定

对于 100% 的数据,保证 1≤n≤100,0≤u,v≤n,1≤w≤10^5。

解题代码:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int n,ans=100000000,vis[110];
struct node{int left,right,father,value;
}tree[110];
int cal(int x,int d){if(!x || vis[x]) return 0;vis[x] = 1;return cal(tree[x].left,d+1) + cal(tree[x].right,d+1)+cal(tree[x].father,d+1) + tree[x].value * d;
}
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>tree[i].value>>tree[i].left>>tree[i].right;for(int i=1;i<=n;i++){tree[tree[i].left].father = i;tree[tree[i].right].father = i;}for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));ans = min(ans,cal(i,0));}cout<<ans;return 0;
}

二叉树——医院设置(洛谷 P1364)相关推荐

  1. 二叉树——美国血统(洛谷 P1827)

    题目选自洛谷P1827 根据前序.中序遍历求出后序遍历,这也是二叉树很重要且基本的知识,还是有必要练练. 至于什么是前.中.后序遍历,这里就不再过多讲述. 用手模拟求解是简单的,接下来看看如何用代码来 ...

  2. 二叉树——二叉树的深度(洛谷 P4913)

    题目选自洛谷P4913 题目描述 给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0.建好树后希望知道这棵二叉树的深度.二叉树的深度是指从根节点到叶子结点时,最多 ...

  3. 二分答案——路标设置(洛谷 P3853)

    题目选自洛谷P3853 这题不算很难,类似于跳石子,典型的二分答案: 先简单说一下思路: 我们把公路上相邻路标的最大距离定义为该公路的"空旷指数" 求增设路标后能达到的最小&quo ...

  4. 洛谷P1364 医院设置

    LITTLESUN的第一道图论,撒花~~ 题目链接 这道题是Floyd的板子题 注意对于矩阵图的初始值赋值要全部赋值成最大值 十六进制的最大值表示方式是0x3f3f3f3f memset(G,0x3f ...

  5. 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)

    题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...

  6. 洛谷P3853 [TJOI2007]路标设置

    P3853 [TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题与 洛谷P2678 [NOIP2015 提高组] 跳石头 和 洛谷P1182 数列分段 ...

  7. 树讲解(5)——医院设置

    洛谷--P1364 医院设置 题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定 ...

  8. [洛谷P1040] 加分二叉树

    洛谷题目链接:加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di ...

  9. 信息学奥赛一本通 1981:【18NOIP普及组】对称二叉树 | 洛谷 P5018【NOIP2018 普及组】 对称二叉树

    [题目链接] ybt 1981:[18NOIP普及组]对称二叉树 洛谷 P5018[NOIP2018 普及组] 对称二叉树 [题目考点] 二叉树 [解题思路] 先求出二叉树中各子树的结点数 遍历二叉树 ...

最新文章

  1. mmap映射大于4g的文件_iOS文件内存映射——MMAP
  2. Npm如何升级package.json
  3. 百词斩和扇贝打卡测试与评估
  4. 微课|玩转Python轻松过二级:第3章课后习题解答5
  5. 【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结
  6. FPGA实现VGA显示(五)——————配置ROM测试及图片显示(b)
  7. 莫比乌斯函数(bzoj 1101: [POI2007]Zap)
  8. 指数分布族(The Exponential Family)与广义线性回归(Generalized Linear Model GLM)
  9. Ubuntu下.tar.bz2和.tar.gz文件的解压命令
  10. PPT小图标库及配色网站推荐
  11. 谷歌浏览器扩展程序_谷歌浏览器扩展程序现恶意软件,已被下载千万次
  12. 微信任意用户密码修改漏洞分析
  13. 对抗学习概念、基本思想、方法综述
  14. Python TIN网生成(Delaunay三角形)
  15. 大数据分析的好帮手 Excel函数应用的顶级实战 Excel数据分析应用+VBA实战 24G课程
  16. 写博客文档的神器:Typora 、Mathpix Snipping Tool
  17. 利用python-docx设置简单的word文档模板
  18. 单调函数有界性类题目解法
  19. CSDN写博客——去水印or自定义水印#解密CSDN上传图片生成链接的内容
  20. 如何批量将接口加入VLAN

热门文章

  1. pll制作分频器_PLL学习过程记录
  2. 如何在Kubernetes上运行PostgreSQL
  3. 大开眼界百度云盘2018_文化差异的大开眼界
  4. devops流程工具_您的DevOps工作流程依赖哪些工具?
  5. jsoup爬虫技术精通_精通业务的同时保持技术的3种方法
  6. python 重复执行任务_使用Python自动执行数字艺术家的重复任务
  7. (20)css3新增选择器
  8. Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!
  9. 属性 元素的内容 创建,插入和删除节点 虚拟节点
  10. Bootstrap3 表格样式