luogu P1364 医院设置
题目描述
设有一棵二叉树,如图:
其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为1。如上图中,
若医院建在1 处,则距离和=4+12+2*20+2*40=136;若医院建在3 处,则距离和=4*2+13+20+40=81……
输入输出格式
输入格式:
第一行一个整数n,表示树的结点数。(n≤100)
接下来的n行每行描述了一个结点的状况,包含三个整数,整数之间用空格(一个或多个)分隔,其中:第一个数为居民人口数;第二个数为左链接,为0表示无链接;第三个数为右链接。
输出格式:
一个整数,表示最小距离和。
输入输出样例
5 13 2 3 4 0 0 12 4 5 20 0 0 40 0 0
思路:有几个人那这个节点的边权就给乘以几,作为他的边权,要确定哪个节点最合适,那就每个节点跑跑最短路试试吧,确定总距离最小的那个结点。(听起来好像有点暴力,不过在luogu上跑到了0ms,哎呦,不错哦) 废话不多说上代码:
#include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<cmath> using namespace std; int n,head[10001],tot,shu[101],ans,p; struct ahah{int nxt,to,w; }edge[1001]; //记住数组要开大一点。 void add(int x,int y,int z) {edge[++tot].nxt=head[x];edge[tot].to=y;edge[tot].w=z;head[x]=tot; } //链表建边。 queue <int> que; int dis[1001],vis[1001],sum; void spfa(int s) {for(int i=1;i<=p;i++) dis[i]=249999;memset(vis,0,sizeof(vis));dis[s]=0;vis[s]=1;que.push(s);while(!que.empty()){int cur=que.front() ;vis[cur]=0; que.pop() ;for(int i=head[cur];i;i=edge[i].nxt){int now=edge[i].to;if(dis[now]>dis[cur]+edge[i].w){dis[now]=dis[cur]+edge[i].w;if(!vis[now]){vis[now]=1;que.push(now); }}}} sum=0;for(int i=1;i<=p;i++)sum+=dis[i]*shu[i]; //统计总长度。 } int main() {int vv=999999;scanf("%d",&n);p=n;int x,y,z;while(n--){scanf("%d%d%d",&z,&x,&y);ans++;shu[ans]=z;add(ans,x,1);add(x,ans,1); //双向建边。 add(ans,y,1);add(y,ans,1);}for(int i=1;i<=p;i++){spfa(i); //挨个边跑跑。 vv=min(vv,sum);}printf("%d",vv); }
此为个人略解,转载请标明出处:http://www.cnblogs.com/rmy020718/p/8834789.html
那年你一袭袈裟相思放下,可曾记得我儒染风华青丝白发,一语落罢,却是一盏清茶。
转载于:https://www.cnblogs.com/rmy020718/p/8834789.html
luogu P1364 医院设置相关推荐
- 洛谷P1364 医院设置
LITTLESUN的第一道图论,撒花~~ 题目链接 这道题是Floyd的板子题 注意对于矩阵图的初始值赋值要全部赋值成最大值 十六进制的最大值表示方式是0x3f3f3f3f memset(G,0x3f ...
- 树讲解(5)——医院设置
洛谷--P1364 医院设置 题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定 ...
- 【最短路】【Floyed】医院设置(ssl 1614)
医院设置 ssl 1614 题目大意: 有n个点,在一个点上安医院,使这个点到其他点的最短路之和最小 原题: Description 设有一棵二叉树(如右图).其中,圈中的数字表示结点中居民的人口.圈 ...
- 分布式医疗挂号系统(二) | 开发医院设置微服务模块
本系列文章介绍从0开始搭建一个基于分布式的医疗挂号系统.本次四篇文章完成了医院设置微服务模块的后端接口,为了方便开发,对接口的返回结果.全局异常.全局日志进行了统一处理. 同时,为了方便进行访问测试, ...
- 分布式医疗挂号系统(七) | 开发医院设置页面
@[toc](分布式医疗挂号系统(七) | 开发医院设置页面) 在分布式医疗挂号系统中,前端主要使用的两个技术是Vue和ElementUI.医院设置微服务模块的后端之前已经完成,现在需要借助Vue+E ...
- 后台系统-医院设置信息接口开发
后台系统-医院设置接口-需求和准备 1.需求 2.表结构 3.医院模块开发 3.1. 搭建医院模块service-hosp 3.2.引入依赖 3.3.添加配置文件application.propert ...
- 信息学奥赛一本通|1338:【例3-3】医院设置
1338:[例3-3]医院设置 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6449 通过数: 4362 [题目描述] 设有一棵二叉树(如下图),其中圈中的数字表示结点中居民的 ...
- 二叉树——医院设置(洛谷 P1364)
题目选自洛谷P1364 从指定结点开始,使用DFS,对于某个结点来说,搜索的深度就是源点到这个结点的距离,单点贡献(该点所有居民到医院的距离之和)就是源点到这个结点的距离乘上该点的居民数量:然后加上自 ...
- Luogu P3853 路标设置
这大概是我第一次发难题的题解吧-- 这道题我整了好几天,才过. 题面 &\&& 题解 如果单纯地思考怎么拿部分分,那这个题并不难,暴力模拟一遍就行了,小样例能过. 如果你要拿, ...
- 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置
时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1018 通过数: 719 [题目描述] 设有一棵二叉树(如图3-8,其中圈中的数字表示结点中居民的人口,圈边上数字表示结点编号.现 ...
最新文章
- Python带你轻松进行网页爬虫
- android实现计时器
- 分库分表的类型和特点
- superset可视化-Bar Chart
- 项目需求讨论--可能是用InputFilter来做的最好的金额限制
- 集成学习与随机森林练习题
- Lattice Diamond软件使用
- 美国大学课堂的契约精神(纽约时报中文网 )
- 浅析《人间失格》中的经典句段
- Kaggle Quora-如何快速进行数据分析 #0
- 如何从一根普通八芯网线如何分出电话线和网络线?
- 基于B树的图书管理系统(C语言)(含完整代码)
- python pip 查看一个package的所有版本
- C++运算符重载(类内、外重载)
- sku设计mysql_如何设计SKU表结构
- 小生云服务器,HobitLab#2--云服务器的有效利用之搭建tiny tiny RSS
- java中 exe是什么文件_从文件位置运行Java中的.exe文件
- 使用pytorch可视化中间层的结果
- @Slf4j是啥,它是干啥的
- 发明专利和实用新型专利有什么不同?
热门文章
- 不等式解集怎么取_6.初中数学:一个不等式的解集,都是另一个不等式的解,求a的取值范围?...
- 基本系统设备_正规全体灭火系统承包资质品质更好_天霖工程
- c语言乘法怎么手写,发现要实现手写乘法计算过程也让我头疼
- centos7安装uwsgi报错_nginx + uwsgi 发布django项目!(linux为centos7)
- python try except continue_python中 try、except、finally执行顺序
- 2013年计算机考试题库,2013年计算机三级数据库上机冲刺试题一及答案
- 山大824计算机基础,山大考研辅导班:山东大学2020年824计算机基础考研自命题科目考试大纲...
- python对象和类_Python面向对象(一)类与对象
- python笔试和面试题汇总(免费下载)
- 阿里云云计算 14 使用阿里云中的OSS