一張圖,第i
ii個點參加任務需要mki
mk_i
mki
元,連線一條邊需要一定費用,要求每個聯通圖都有參加任務的點,求最小費用。
其實就是求若干個最小生成樹然後這個最小生成樹的權值就是這個棵樹的所有邊權加上最小的點權。我們使用kru
skal
kruskal
kruska
l來求,我們每次合併兩個聯通塊時可以減少兩個聯通塊的最小點權中較大的費用。
也就是我們定義cos
ti
cost_i
costi
表示i
ii這個聯通塊中的最小點權,若我們合併一條邊x
−>
yx->y
x−>
y可以減少的費用是max
−w,0
}max\-w,0\}
max−w,
0}然後我們也是先將邊排序然後處理即可。
#include
#include
#include
using
namespace std;
const
int n=
1100
;struct nodea[n*n]
;int n,tot,ans,fa[n]
,cost[n]
;bool
cmp(node x,node y)
intfind
(int x)
void
unionn
(int x,
int y)
intmain()
for(
int i=
1;i<=n;i++
)scanf
("%d"
,&cost[i]
),fa[i]
=i,ans+
=cost[i]
;sort
(a+1
,a+1
+tot,cmp)
;for
(int i=
1;i<=tot;i++
)printf
("%d"
,ans)
;}
JZOJ 3237 間諜派遣 最小生成樹
傳送門 每個間諜與其他間諜會面都會花費一定的費用,而最後指派某個間諜也會花費一定的費用 現在問我們在最優安排的情況下,最少需要花費的費用是多少 因為要花費最少的費用,所以直接對邊權排序,然後逐個加入圖中即可 include include include include include includ...
最小生成樹 Jzoj P3237 間諜派遣
description 你是m,乙個僱傭n個標號為從1到n的間諜的情報機關的總管。每個間諜被派往不同的國家並在那獲取重要情報。如下是你的任務 1 在部分間諜間組織會面。每次會面在兩個間諜間進行,兩個間諜交換他們自己獲取的或從之前會面中得到的資訊。因為在不同國家的兩個間諜間組織機密會面很困難,所以每次...
並查集(最小生成樹)
時間限制 1000 ms 記憶體限制 65536 kb 題目描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使...