演算法學習筆記 村莊通電問題 prime演算法

2021-10-05 18:45:41 字數 1570 閱讀 8242

題解prime演算法詳解

問題描述

2023年,全中國實現了戶戶通電。作為一名電力建設者,小明正在幫助一帶一路上的國家通電。

這一次,小明要幫助 n 個村莊通電,其中 1 號村莊正好可以建立乙個發電站,所發的電足夠所有村莊使用。

現在,這 n 個村莊之間都沒有電線相連,小明主要要做的是架設電線連線這些村莊,使得所有村莊都直接或間接的與發電站相通。

小明測量了所有村莊的位置(座標)和高度,如果要連線兩個村莊,小明需要花費兩個村莊之間的座標距離加上高度差的平方,形式化描述為座標為 (x_1, y_1) 高度為 h_1 的村莊與座標為 (x_2, y_2) 高度為 h_2 的村莊之間連線的費用為

sqrt((x_1-x_2)(x_1-x_2)+(y_1-y_2)(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。

在上式中 sqrt 表示取括號內的平方根。請注意括號的位置,高度的計算方式與橫縱座標的計算方式不同。

由於經費有限,請幫助小明計算他至少要花費多少費用才能使這 n 個村莊都通電。

輸入格式

輸入的第一行包含乙個整數 n ,表示村莊的數量。

接下來 n 行,每個三個整數 x, y, h,分別表示乙個村莊的橫、縱座標和高度,其中第乙個村莊可以建立發電站。

輸出格式

輸出一行,包含乙個實數,四捨五入保留 2 位小數,表示答案。

樣例輸入

41 1 3

9 9 7

8 8 6

4 5 4

樣例輸出

17.41

評測用例規模與約定

對於 30% 的評測用例,1 <= n <= 10;

對於 60% 的評測用例,1 <= n <= 100;

對於所有評測用例,1 <= n <= 1000,0 <= x, y, h <= 10000。

這題可以使用prim演算法進行求解,別忘了最後的輸出的2位小數。

#include

#include

using

namespace std;

const

int maxn =

1004

;const

double max =

0x7f7f7f7f

;int n;

double a[maxn]

[maxn]

,d[maxn]

, ans;

bool visit[maxn]

;typedef

struct

point;

point p[maxn]

;void

init()

}void

prim()

}int

main

(void

)prim()

;for

(int i =

2; i <= n; i++

) ans +

= d[i]

;// 輸出2位小數

printf

("%.2f"

, ans)

;return0;

}

演算法學習筆記 約瑟夫問題

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...

演算法 學習筆記

1.輸入輸出演算法至少有乙個或多個輸出 2.有窮性 3.確定性 4.可行性 1.正確性a.演算法程式沒有語法錯誤 b.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 c.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 d.演算法對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果...

演算法學習筆記

複雜度分析 1.只關注迴圈次數最多的一行 2.總複雜度等於量級最大 的複雜度 3.巢狀 的複雜度等於巢狀 內外複雜度的乘積 單鏈表結構和順序儲存結構的優缺點 儲存分配方式 時間效能 空間效能 單鏈表結構 用一組任意的儲存單元存放線性表元素 查詢 o n 插入和刪除 找到某位置的指標後,插入和刪除的時...