做英文網(wǎng)站 賺美元網(wǎng)絡(luò)推廣費計入什么科目
P1364 醫(yī)院設(shè)置
題目描述
設(shè)有一棵二叉樹,如圖:
其中,圈中的數(shù)字表示結(jié)點中居民的人口。圈邊上數(shù)字表示結(jié)點編號,現(xiàn)在要求在某個結(jié)點上建立一個醫(yī)院,使所有居民所走的路程之和為最小,同時約定,相鄰接點之間的距離為 1 1 1。如上圖中,若醫(yī)院建在 1 1 1 處,則距離和 = 4 + 12 + 2 × 20 + 2 × 40 = 136 =4+12+2\times20+2\times40=136 =4+12+2×20+2×40=136;若醫(yī)院建在 3 3 3 處,則距離和 = 4 × 2 + 13 + 20 + 40 = 81 =4\times2+13+20+40=81 =4×2+13+20+40=81。
輸入格式
第一行一個整數(shù) n n n,表示樹的結(jié)點數(shù)。
接下來的 n n n 行每行描述了一個結(jié)點的狀況,包含三個整數(shù) w , u , v w, u, v w,u,v,其中 w w w 為居民人口數(shù), u u u 為左鏈接(為 0 0 0 表示無鏈接), v v v 為右鏈接(為 0 0 0 表示無鏈接)。
輸出格式
一個整數(shù),表示最小距離和。
樣例 #1
樣例輸入 #1
5
13 2 3
4 0 0
12 4 5
20 0 0
40 0 0
樣例輸出 #1
81
提示
數(shù)據(jù)規(guī)模與約定
對于 100 % 100\% 100% 的數(shù)據(jù),保證 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。
//【參考代碼】
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N =105;
int map[N][N];//存圖的
int v[N];
int n;
int main() {memset(map,0x3f,sizeof(map));scanf("%d",&n);//存儲圖 for(int i=1; i<=n; i++){int left, right;scanf("%d",&v[i]);scanf("%d",&left);scanf("%d",&right);if(left!=0){map[i][left] = 1;map[left][i] = 1;}if(right!=0){map[i][right] = 1;map[right][i] = 1;}map[i][i] = 0;}//弗洛伊德 for(int k=1; k<=n; k++){for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){map[i][j] = min(map[i][j], map[i][k]+map[k][j]);}}} //醫(yī)院設(shè)置的計算式子int min = 1000;for(int i=1; i<=n; i++){int sum = 0;for(int j=1; j<=n; j++){sum+=map[i][j]*v[j];}if(sum<min){min = sum;}}cout<<min;return 0;
}