题目链接: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开始的(被坑了)~~~
 
代码如下:
 #include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define inf 0x3f3f3f int n, ptr[], mpt[][], L, R;
void Floyd(){
for (int k = ; k <= n; k++){
for (int i = ; i <= n; i++){
for (int j = ; j <= n; j++)
mpt[i][j] = min(mpt[i][j], mpt[i][k] + mpt[k][j]);
}
}
}
int main(){
int i, j, sum, tmp;
while (cin >> n){
sum = inf;
memset(mpt, inf, sizeof(mpt));
for (i = ; i <= n; i++){
cin >> ptr[i] >> L >> R;
mpt[L][i] = mpt[i][L] = mpt[R][i] = mpt[i][R] = ;
}
Floyd();
for (i = ; i <= n; i++){
tmp = ;
for (j = ; j <= n; j++) {
if (i != j)
tmp += mpt[i][j] * ptr[j];
}
sum = min(sum, tmp);
}
cout << sum << endl;
}
return ;
}

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

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

    题目链接:http://acm.swust.edu.cn/problem/767/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  2. SWUST OJ 1075 求最小生成树(Prim算法)

    求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...

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

    1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度.现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄 ...

  4. 洛谷P1364 医院设置(Floyd)

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

  5. 【6.10校内test】T2 医院设置

    医院设置[题目链接] 感觉我超废 我是一个连floyd都不会写了的灵魂OI选手qwq(考场上写了半天spfa然后写炸了(微笑)) floyd的暴力: 1.先建树:用邻接矩阵存.存之前记得先初始化为IN ...

  6. 最短路径—Dijkstra算法和Floyd算法

    原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最后边附有我根据文中Dijkstra算法的描述使用jav ...

  7. Floyd算法(三)之 Java详解

    前面分别通过C和C++实现了弗洛伊德算法,本文介绍弗洛伊德算法的Java实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3. 弗洛伊德算法的代码说明 4. 弗洛伊德算法的源码 转载请注明 ...

  8. Floyd算法(二)之 C++详解

    本章是弗洛伊德算法的C++实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3. 弗洛伊德算法的代码说明 4. 弗洛伊德算法的源码 转载请注明出处:http://www.cnblogs.c ...

  9. Floyd算法(一)之 C语言详解

    本章介绍弗洛伊德算法.和以往一样,本文会先对弗洛伊德算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3 ...

随机推荐

  1. Angular ng-repeat 对象和数组遍历

    直接上代码 <!DOCTYPE html> <html> <head> <meta name="description" content= ...

  2. Qt 如何处理密集型耗时的事情(频繁调用QApplication::processEvents)

    有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态.例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响 ...

  3. Windows-1252对Latin1编码有改变(并不完全兼容),而且Latin1缺失了好多西欧字符(法语,德语,西班牙语都有)

    主要是80到9F的编码被改掉了.从latin1的控制字符,变成了可以输出的可见字符. latin1编码: ISO-8859-1   x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA x ...

  4. C(n+m,m) mod p的一类算法

    Lucas定理 A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]. 则组合数C(A,B)与C(a[n],b[n])*C(a[n ...

  5. Is it possible to implement a Firebug-like “inspect element” DOM element highlighter with client-side JavaScript?

    Is it possible to implement a Firebug-like "inspect element" DOM element highlighter with ...

  6. Product(大数相乘)

    Description The problem is to multiply two integers X, Y. (0<=X,Y<10250) Input The input will ...

  7. BZOJ 1097: [POI2007]旅游景点atr( 最短路 + 状压dp )

    先最短路预处理, 然后状压就行了 -------------------------------------------------------------------------- #include ...

  8. C/C++指针和数组的关系

    首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...

  9. C++的常量折叠(一)

    前言 前几天女票问了我一个阿里的面试题,是有关C++语言的const常量的,其实她一提出来我就知道考察的点了:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配 ...

  10. yii教程

    http://www.yiichina.com/doc 官网是很好的参考文档