zoukankan      html  css  js  c++  java
  • 洛谷 P1364 医院设置

    题目描述

    设有一棵二叉树,如图:

                                             

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

    若医院建在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
    
    输出样例#1:
    81


    求带权重心.
    屠龙宝刀点击就送
    #include <ctype.h>
    #include <cstring>
    #include <cstdio>
    #define N 1500
    
    void read (int &x)
    {
        x=0;
        char ch=getchar();
        while (!isdigit(ch)) ch=getchar();
        while (isdigit(ch)) x=x*10+ch-'0',ch=getchar();
    }
    struct node
    {
        int next,to;
    }edge[N<<2];
    bool vis[N];
    int sum,cur,dep[N],ans=0,size[N],n,head[N<<2],cnt,w[N];
    void add (int f,int t)
    {
        cnt++;
        edge[cnt].next=head[f];
        edge[cnt].to=t;
        head[f]=cnt;
    }
    int min (int a,int b){return a>b?b:a;}
    void pd (int x,int deep)
    {
        dep[x]=deep;
        ans+=(dep[x]-1)*w[x];
        for (int i=head[x];i;i=edge[i].next)
        {
            if (!dep[edge[i].to])
                pd(edge[i].to,deep+1);
        }
    }
    void dfs (int x)
    {
        size[x]=w[x];
        vis[x]=1;
        for (int i=head[x];i;i=edge[i].next)
        {
            if (!vis[edge[i].to])
            {
                dfs(edge[i].to);
                size[x]+=size[edge[i].to]; 
            }
        }
        if (size[x]*2>=sum&&!cur) cur=x;
    }
    int main()
    {
        read(n);
        for (int l,r,i=1;i<=n;i++)
        {
            read(w[i]);read(l);read(r); 
            if(l) add(i,l),add(l,i);
            if(r) add(i,r),add(r,i);
            sum+=w[i];
        }
        dfs(1);
        pd(cur,1);
        printf("%d",ans);
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    uva 11488
    探测器-旅行者1号:百科
    理论-生命起源理论:百科
    定律:目录
    定律:百科
    理论:目录
    理论(哲学):百科
    理论:百科
    汉语-词语:潮汐
    物理-电磁-电磁相互作用:百科
  • 原文地址:https://www.cnblogs.com/ruojisun/p/6814717.html
Copyright © 2011-2022 走看看