1488 新的開始

2021-10-08 00:11:26 字數 1440 閱讀 6638

1488:新的開始

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 773 通過數: 401

【題目描述】

發展採礦業當然首先得有礦井,小 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【提示】

樣例解釋

小 ff 可以選擇在 4 號礦井建立發電站然後把所有礦井都不其建立電網,總花費是 3+2+2+2=9。

資料範圍:

對於 30% 的資料:1≤n≤50;

對於 100% 的資料:1≤n≤300,0≤vi,pi,j≤105​​ 。

思路:當邊權特別大,不取這條邊,分別修兩個電站才是最優的。

正確的解法是在原圖的基礎上虛擬乙個點,原圖的每乙個節點都與這 個虛擬點有一條邊,邊權為在該點上修建電站的花費。

再對新圖做最小生成樹。

#include

#define inf 1<<30

#define ll long long

using

namespace std;

int n,x,fa[

305]

,num=0;

struct edge

}a[305

*305];

intfind

(int x)

intmain()

fa[n+1]

=n+1

;for

(int i=

1;i<=n;i++)}

sort

(a,a+num)

;int cnt=0;

ll s=0;

for(

int i=

0;i) cout << s << endl;

return0;

}

1488 新的開始

題目描述 發展採礦業當然首先得有礦井,小 ff 花了上次探險獲得的千分之一的財富請人在島上挖了 n 口礦井,但他似乎忘記考慮的礦井供電問題 為了保證電力的 小 ff 想到了兩種辦法 在這一口礦井上建立乙個發電站,費用為 v 發電站的輸出功率可以供給任意多個礦井 將這口礦井與另外的已經有電力 的礦井之...

ybt 1488 新的開始

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

新的開始,行的開始

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