最小生成樹prim 給水

2021-09-25 01:27:06 字數 1006 閱讀 1681

所以到底讀「給予」的「給」,還是平時用的「給」。。。

fj決定給n(1<=n<=300)個草地給水,草地編號為1到n。他可以在該草地處建立一口井,也可以建立管道從別的草地引水進來,在第i塊草地處挖一口井需要花費w_i(1<=w_i<=100,000),連線井i和井j的管道需要花費p_ij(1<=p_ij<=100,000,p_ij=p_ji;p_ii=0)。

計算最少需要花費多少才能保證每個草地都有水。

input

第一行,乙個整數n

第2到n+1行,第i+1行輸入w_i

第n+2到2n+1行,每行n個空格隔開的整數,表示p_ij

output

輸出最少花費。

sample input45

4430 2 2 2

2 0 3 3

2 3 0 4

2 3 4 0

sample output

最小生成樹之前是學過的。然後看到這題第一感覺就是最小生成樹。但是使此節點生效的話需要乙個「啟動值」,然後就感覺有點麻煩。我試想過將路徑加上初始值,但是貌似不可行。直到評講時——

某大佬:我們可以加乙個0節點,使0號節點到其它節點…

然後我瞬間想到了——

某大佬:的距離為初始值。。。

然後這樣就方便多了嗯。

直接最小生成樹走起~但是依然不想優化。還有很多題等著。。。

#include

int n,f[

301]

[301

],k,ans;

bool b[

301]

;int

main()

b[d]=1

;//將這條最短路徑連上,答案加上它的值

ans+

=min;

}printf

("%d"

,ans)

;fclose

(stdin);

fclose

(stdout);

}

JZOJ 最小生成樹 給水

由n塊草地組成了乙個花園 現在要你給這個花園裡的所有草地供水 你可以在第i ii塊草地挖井,費用為a i a i a i 也可以從其他草地連線水管過來 但前提是那個草地要有水,費用為f i j f i j f i j 現在要你求給所有草地供水 最少需要多少大洋 第一行,乙個n nn第2 22 n 1...

最小生成樹 Prim

include stdio.h include stdlib.h include io.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define maxedge 20 ...

最小生成樹 prim

演算法模型 由任意乙個頂點開始 將此頂點存入s集,剩餘頂點存入t集合 每次遍歷頂點,取一條能夠連線s與t最短邊e,直到所有頂點全部加入s include include define inf 1 30 int n,m,vis 110 low 110 int map 110 110 int init ...