洛谷P1364医院设置

洛谷P1364 医院设置

医院设置

题目描述

设有一棵二叉树,如图:

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

输入格式

第一行一个整数 n n n,表示树的结点数。

接下来的 n n n 行每行描述了一个结点的状况,包含三个整数 w , u , v w, u, v w,u,v,其中 w w w 为居民人口数, u u u 为左链接(为 0 0 0 表示无链接), v v v 为右链接(为 0 0 0 表示无链接)。

输出格式

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

样例 #1

样例输入 #1

复制代码
5						
13 2 3
4 0 0
12 4 5
20 0 0
40 0 0

样例输出 #1

复制代码
81

提示

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 100 1 \leq n \leq 100 1≤n≤100, 0 ≤ u , v ≤ n 0 \leq u, v \leq n 0≤u,v≤n, 1 ≤ w ≤ 1 0 5 1 \leq w \leq 10^5 1≤w≤105。

正确代码

cpp 复制代码
//
// Created by 枫飘长安 on 2024/4/15.
//
#include <bits/stdc++.h>
using namespace std;
/**
  *author: 枫飘长安
  *date: 2024/4/15
  *fileName: P1364.cpp
  *description: TODO
  **/
typedef long long ll;
const int MAXN = 1e6+10;

int ans = 0x3f3f3f3f;
int n;
bool graph[105][105];
bool vis[105];
int num[105];


struct node {
    int u,step;
};

int bfs(int x) {
    memset(vis,0,sizeof(vis));
    queue<node> q;
    vis[x] = true;
    q.push((node){x,0});
    int sum = 0;
    while(!q.empty()){
        node temp=q.front();
        q.pop();
        for(int i=1;i<=n;i++)
            if(graph[temp.u][i]&&!vis[i]){
                vis[i] = true;
                q.push({i,temp.step+1});
                sum+=num[i]*(temp.step+1);
            }
    }
    return sum;
}

int main (){
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int l,r;
        cin>> num[i] >> l >> r;
        if (l != 0) {
            graph[i][l] = true;
            graph[l][i] = true;
        }
        if (r != 0) {
            graph[i][r] = true;
            graph[r][i] = true;
        }
    }
    for (int i = 1; i <=n; i++) {
        ans = min(ans,bfs(i));
    }
    cout << ans;
    return 0;
}
相关推荐
江畔柳前堤8 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore9 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考10 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX11 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面12 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号12 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽12 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI12 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者14 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者14 小时前
【征程6】校准量化中HistogramObserver解析
算法