zoukankan      html  css  js  c++  java
  • 【洛谷 1364】医院设置

    题目描述

    设有一棵二叉树,如图:

    其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为1。如上图中,

    若医院建在1 处,则距离和=4+12+2*20+2*40=136;若医院建在3 处,则距离和=4*2+13+20+40=81……

    输入输出格式

    输入格式:

    第一行一个整数n,表示树的结点数。(n≤100)

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

    输出格式:

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

    输入输出样例

    输入样例#1: 复制
    5						
    13 2 3
    4 0 0
    12 4 5
    20 0 0
    40 0 0

    题解:哇漏了一道水的Floyd没写呢。
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    typedef long long ll;
    using namespace std;
    int n,f[105][105],a[105];
    int main(){
        freopen("1364.in","r",stdin);
        freopen("1364.out","w",stdout);
        scanf("%d",&n);
        memset(f,0x3f,sizeof(f));
        for(int i=1;i<=n;i++){
            int x,y; f[i][i]=0;
            scanf("%d %d %d",&a[i],&x,&y);
            if(x>0) f[i][x]=f[x][i]=1;
            if(y>0) f[i][y]=f[y][i]=1;
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
        int ans=0x3f3f3f3f;
        for(int i=1;i<=n;i++){
            int num=0;
            for(int j=1;j<=n;j++)
                num+=a[j]*f[i][j];
            ans=min(ans,num); 
        }
        cout<<ans;
        return 0;
    }


  • 相关阅读:
    border——边框属性
    CSS1,CSS2选择器详解
    CSS样式表与HTML结合的方法
    详细解析HTML基础结构
    jquery 解析xml
    asp.net js调用后台方法
    asp.net利用剪切板导出excel
    webform 不实用office控件导出excel StringBuilder 类型拼接字符串表格导出excel
    Android再学习-20141018-布局-进度条
    Android再学习-20140928-布局
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11184931.html
Copyright © 2011-2022 走看看