日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置

發布時間:2024/4/30 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 1018 通過數: 719

【題目描述】

設有一棵二叉樹(如圖3-8,其中圈中的數字表示結點中居民的人口,圈邊上數字表示結點編號。現在要求在某個結點上建立一個醫院,使所有居民所走的路程之和為最小,同時約定,相鄰結點之間的距離為1。就本圖而言,若醫院建在1處,則距離和=4+12+220+240=136;若醫院建在3處,則距離和=4*2+13+20+40=81……

【輸入】

第一行一個整數n,表示樹的結點數(n≤100)。接下來的n行每行描述了一個結點的狀況,包含三個整數,整數之間用空格(一個或多個)分隔,其中:第一個數為居民人口數;第二個數為左鏈接,為0表示無鏈接;第三個數為右鏈接,為0表示無鏈接。

【輸出】

一個整數,表示最小距離和。

【輸入樣例】

5
13 2 3
4 0 0
12 4 5
20 0 0
40 0 0

【輸出樣例】

81

【來源】

No

算法分析

這是一道簡單的二叉樹應用問題,問題中的節點數并不多,數據規模也不大,采用鄰接矩陣存儲,用Floyed求出任意兩節點之間的最短路徑,然后窮舉醫院可能建立的n個節點位置找出一個最小距離的位置即可。

當然也可以用雙鏈表結構或帶父節點信息的數組存儲結構來解決,但實際操作稍微麻煩了一點。

代碼

#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int a[101]; int g[101][101]; int main () {int n,i,j,k,l,r,min,total;cin>>n;for(i=1;i<=n;i++){for(j=1;j<=n;j++){g[i][j]=1000000;}}for(i=1;i<=n;i++){g[i][j]=0;cin>>a[i]>>l>>r;if(l>0) g[i][l]=g[l][i]=1;if(r>0) g[i][r]=g[r][i]=1;}for(k=1;k<=n;k++){for(i=1;i<=n;i++){if(i!=k){for(j=1;j<=n;j++){if(i!=j&&k!=j&&g[i][k]+g[k][j]<g[i][j]){g[i][j]=g[i][k]+g[k][j];}}}}}min=0x7fffffff;for(i=1;i<=n;i++){total=0;for(j=1;j<=n;j++){total+=g[i][j]*a[i];}if(total<min) min=total;}cout<<min<<endl;return 0; }

總結

以上是生活随笔為你收集整理的信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。