[Swust OJ 412]--医院设置(floyd算法)

题目链接:http://acm.swust.edu.cn/problem/412/

Time limit(ms): 1000        Memory limit(kb): 65535

Description

设有一棵二叉树,如图: 

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

Input

第一行一个整数n,表示树的结点数。(n≤100) 
接下来的n行每行描述了一个结点的状况,包含三个整数,整数之间用空格(一个或多个)分隔,其中:第一个数为居民人口数;第二个数为左链接,为0表示无链接;第三个数为右链接。

Output

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

Sample Input


5

13 2 3

4 0 0

12 4 5

20 0 0

40 0 0

Sample Output

81

解题思路:传说中只有5行的floyd算法(链接)带进去瞎搞就可以了·--,恩~~看题中的样例数据,下标从1开始的(被坑了)~~~

代码如下:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 #define inf 0x3f3f3f
 6
 7 int n, ptr[101], mpt[101][101], L, R;
 8 void Floyd(){
 9     for (int k = 1; k <= n; k++){
10         for (int i = 1; i <= n; i++){
11             for (int j = 1; j <= n; j++)
12                 mpt[i][j] = min(mpt[i][j], mpt[i][k] + mpt[k][j]);
13         }
14     }
15 }
16 int main(){
17     int i, j, sum, tmp;
18     while (cin >> n){
19         sum = inf;
20         memset(mpt, inf, sizeof(mpt));
21         for (i = 1; i <= n; i++){
22             cin >> ptr[i] >> L >> R;
23             mpt[L][i] = mpt[i][L] = mpt[R][i] = mpt[i][R] = 1;
24         }
25         Floyd();
26         for (i = 1; i <= n; i++){
27             tmp = 0;
28             for (j = 1; j <= n; j++) {
29                 if (i != j)
30                     tmp += mpt[i][j] * ptr[j];
31             }
32             sum = min(sum, tmp);
33         }
34         cout << sum << endl;
35     }
36     return 0;
37 }

时间: 2024-10-12 17:37:13

[Swust OJ 412]--医院设置(floyd算法)的相关文章

哈理工oj 1348 最短路径 (floyd算法)

<p>最短路径 </p><p>Time Limit: 1000 MS Memory Limit: 32767 K </p><p>Total Submit: 208(28 users) Total Accepted: 31(20 users) Rating:  Special Judge: No   Description 给出一个有向带权图G,针对该图有如下的两种操作: (1)标记该图的一个点 (2)找到两点间的只通过已标记点的最短路径长度<

[Swust OJ 767]--将军回家(Dijkstra算法)

题目链接:http://acm.swust.edu.cn/problem/767/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 在涪江河的两边共有n个城市,其中位于一边的城市属于1类城市,另外一边的属于2类城市,(特别的:城市1属于1类,城市2属于2类).现在知道一些道路的情况,比如知道城市1到城市5之间有一条长度为100的路.将军要从城市1回到城市2的家,他就开始设计回家的线路.回家时由于驾照的关系,只能越过一次涪江河.现在

Floyd算法应用-医院选址问题

1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度.现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近? 2) 基本要求 (1) 建立模型,设计存储结构: (2) 设计算法完成问题求解: (3) 分析算法的时间复杂度. 3) 设计思想 医院选址问题实际是求有向图中心点的问题.首先定义顶点的偏心度. 设图G=(V,E),对任一顶点k,称E(k)=max{d(i, k)}(i∈V)

医院选址问题【Floyd算法】

1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度.现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近? 2) 基本要求 (1) 建立模型,设计存储结构: (2) 设计算法完成问题求解: (3) 分析算法的时间复杂度. 3) 设计思想 医院选址问题实际是求有向图中心点的问题.首先定义顶点的偏心度. 设图G=(V,E),对任一顶点k,称E(k)=max{d(i, k)}(i∈V)

洛谷P1364 医院设置(Floyd)

题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为l.如上图中, 若医院建在1 处,则距离和=4+12+2*20+2*40=136:若医院建在3 处,则距离和=4*2+13+20+40=81…… 输入输出格式 输入格式: 第一行一个整数n,表示树的结点数.(n≤100) 接下来的n行每行描述了一个结点的状况,包含三个整数,整数之间用空格(一个或多个)分隔,

uva oj 567 - Risk(Floyd算法)

1 /* 2 一张有20个顶点的图上. 3 依次输入每个点与哪些点直接相连. 4 并且多次询问两点间,最短需要经过几条路才能从一点到达另一点. 5 6 bfs 水过 7 */ 8 #include<iostream> 9 #include<cstring> 10 #include<vector> 11 #include<cstdio> 12 #include<queue> 13 using namespace std; 14 15 struct

最短路径Dijkstra算法和Floyd算法整理、

转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径—Dijkstra算法和Floyd算法 Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法 本篇名言:"希望是厄运的忠实的姐妹. --普希金" 我们继续来看下数据结构图中的一个算法,这个算法来自图灵奖得主. 1.  Floyd算法介绍 Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名.注意这个可不是心理学的那个弗洛伊德. 是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径

所有顶点之间的最短路径算法:Floyd算法。

Floyd算法的基本思想是:设集合S的初始状态为空,然后依次向集合S中加入顶点 0,1,...,n-1,每次加入一个顶点,用二维数组d保存各条最短路径的长度,其中d[i][j]存放的是顶点i到顶点j的最短路径的长度. 详细的说明: Floyd算法中最重要的办法为二维数组d[i][j],d[i][j]为从i到j中间只经过S中的顶点的.所有可能的路径中的最短路径的长度.如果从i到j通过S中的节点无法联通,则设置d[i][j]为正无穷.可以称d[i][j]存放的是从i到j的 当前最短路径 的长度.而随