1488 新的開始

2021-09-02 22:36:07 字數 1131 閱讀 5585

【題目描述】

發展採礦業當然首先得有礦井,小 ff 花了上次探險獲得的千分之一的財富請人在島上挖了 n 口礦井,但他似乎忘記考慮的礦井供電問題……

為了保證電力的**,小 ff 想到了兩種辦法:

在這一口礦井上建立乙個發電站,費用為 v(發電站的輸出功率可以供給任意多個礦井)。

將這口礦井與另外的已經有電力**的礦井之間建立電網,費用為 p。

小 ff 希望身為「newbe_one」計畫首席工程師的你幫他想出乙個保證所有礦井電力**的最小花費。

【輸入】

第一行乙個整數 n,表示礦井總數。

第 2∼n+1 行,每行乙個整數,第 i 個數 vi 表示在第 i 口礦井上建立發電站的費用。

接下來為乙個 n×n 的矩陣 p,其中 pi,j 表示在第 i 口礦井和第 j 口礦井之間建立電網的費用(資料保證有pi,j=pj,i​ ,且 pi,i=0。

【輸出】

輸出僅乙個整數,表示讓所有礦井獲得充足電能的最小花費。

【輸入樣例】45

4430 2 2 2

2 0 3 3

2 3 0 4

2 3 4 0

【輸出樣例】

9分析:題目只說了乙個方案,明顯的最小生成樹演算法。

第二個方案是可以建多個電站進行供電,最終考察的是第二個方案。因此要使用改進的prim演算法。演算法改進地方——不是選擇最小邊,二是選擇最小邊或最小建站花費。

#include #include #include #include #include #include #include using namespace std;/**< 最小生成樹問題 */

int n,f[305][305],d[305],v[305],mini[305];

int getmin()

}/**< 只求最小生成樹50分 選擇連線電網和建新電站中較小的方案, sum+=min(mini[k],d[k])70分*/

/**< prim演算法選擇最小邊的時候,在最小邊和最小建站花費中選擇最小的,因為目標是供電,不一定要全部連起來 */

mini[mi]=0;

for(j=1; j<=n; j++)

}else}}

cout

}

1488 新的開始

1488 新的開始 時間限制 1000 ms 記憶體限制 65536 kb 提交數 773 通過數 401 題目描述 發展採礦業當然首先得有礦井,小 ff 花了上次探險獲得的千分之一的財富請人在島上挖了 n 口礦井,但他似乎忘記考慮的礦井供電問題 為了保證電力的 小 ff 想到了兩種辦法 在這一口礦...

ybt 1488 新的開始

不難看出這是一道最小生成樹 but,我 蒟蒻 一開始以為是取最小的 v i v i v i 然後構建最小生成樹 這樣會有乙個問題,建造電網有時候不一定會比建造電站更優 so 我們可以把所有建電站的邊連到乙個虛點上,這樣直接進行最小生成樹就不會有問題了 include using namespace ...

新的開始,行的開始

記下每天自己所作所為,去讀書,去工作,去思考,去行動 用知識去彌補無知,用追求去無視嘲笑,用行動去完成追求 可以時而放鬆,但學習要一直堅持 1.用科學的時間規劃方法去規劃時間,提高效率 讀時間規劃方面的書籍 如番茄工作法 多讀基本,總結歸類,對比找出相同不同之處,並對此著重分析 2.鍛鍊身體,保持健...