• [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 }
    View Code
  • 相关阅读:
    *Server对象的URLEncode方法的详细介绍 *
    *Server对象的方法简单介绍*
    *SQLDB中图片的读取并显示*
    *关于DataBinder.Eval*
    SQLMaps 的基本思想
    *DropdownList的数据绑定*
    面向对象的一些思想
    [zz]NoSQL对比:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j
    [zz]HDFS文件读写 使用c api
    [zz]linux patch 简单使用速查
  • 原文地址:https://www.cnblogs.com/zyxStar/p/4602512.html
Copyright © 2020-2023  润新知