演算法描述
mst(minimum spanning tree,最小生成樹)問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是:設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點v0,將該點加入集合v,再從集合u-v中找到另一點v1使得點v1到v中任意一點的權值最小,此時將b點也加入集合v;以此類推,現在的集合v=,再從集合u-v中找到另一點v2使得點v2到v中任意一點的權值最小,此時將v2點加入集合v,直至所有頂點全部被加入v,此時就構建出了一顆mst。因為有n個頂點,所以該mst就有n-1條邊,每一次向集合v中加入乙個點,就意味著找到一條mst的邊。
prim演算法適用於稠密圖 ,kruskal適用於稀疏圖
例題:
題目描述
經過特色示範羊村檢查,檢查組覺得羊村的道路需要重修,破敗的道路,會影響到小羊們上學的安全。
村長組織施工隊,開始丈量距離,規劃施工方案,已經得到了若干建築物間修建道路的可行方案,共有n個建築物,和m條可選道路。這些路保證可以將n個建築相連。
最終方案中,羊村打算修建全球最豪華的全大理石道路,道路可以雙向通行,且一體成型,路中無縫隙。為了達到這個設計要求,就必須自建大理石工廠!
大理石工廠建造的難度在於,必須根據其需要生產最大長度的大理石來設計。工廠可以生產出不超過其設計極限的任意長度的大理石。例如,設計長度為100的工廠,可以生產100、90等長度的大理石,但是不能生產長度為101的大理石。
羊村的預算有限,希望你能幫忙規劃出乙個修路方案,使得工廠的設計規模盡可能小,且可以保證其能生產的大理石可以連通所有羊村的建築。求出工廠的最小設計規模。
輸入
第一行兩個整數n和m,n表示羊村中的建築數量,m表示可以修建的道路數量。
接下來m行,每行三個整數ai,bi和ci,表示從建築ai,到建築bi,可以修建一條長度為ci的道路。
注意,建築編號從1到n,兩個建築之間可能有多條道路。
輸出
輸出大理石工廠的最小設計規模。
樣例輸入
331
210023
1011
399
樣例輸出
100
資料範圍限制
30%的資料n<=10,n-1<=m<=100。
100%的資料1<=n<=2000,n-1<=m<=10000,1<=ai,bi<=n,1<=ci<=1000000000。
提示
只要修建1到2,以及1到3的道路,就可以使得3個建築相互連通,且最大值只有100,只需要建造設計規模為100的大理石工廠,就可以生產出長度為100和99的大理石。
這道題其實就是一道模板題,只不過是將求邊權和改為了最大邊權。
#include
#include
#include
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using
namespace std;
const
int inf=
2147483647
;int n,m,u,v,w,c[
2010][
2010
],lowcost[
2010
],ans;
bool vis[
2010];
void
input()
}void
prim()
}int
main()
懶羊羊的作業
題面描述 看過國產動畫片的同學都知道,懶羊羊是乙隻非常懶的羊,整天除了吃就是睡,根本沒有時間做作業。明天就是周一了,村長慢羊羊留的作業 把 n 個整數從大 到小排序,它還沒開始寫,真是一件讓羊悲傷的事呀。但是,懶羊羊又是乙隻相 當 機智 的羊,它發現村長年紀大了,這麼多作業根本判不過來,只會檢查作業...
jzoj2182 羊羊吃草
題目描述 小羊們上完課後,紛紛到草場上吃草。而羊村現在正在進行特色示範羊村檢查,領導們想看看羊村的草場。羊村的草場是連續分布的,每塊草場上都有數量不等的羊在吃草。領導們想要檢視連續若干個草場,但是又不想看到超過t隻羊。而村長希望領導們多看看羊村的風貌,盡可能多參觀幾個草場。現在,請你幫村長決定,帶領...
jzoj 2184 羊羊列隊
有n個人,要分成m個班,每個班至少1人。每班貢獻為 max min 2 求最小貢獻值。1 n 10000,1 m 1000,1 ai 1000000 很容易想到 dp 由於我們要使貢獻最小,所以我們不妨將它排序,然後每次取連續的一段,這樣可以保證值最小。這題由於要剛好分成 m 個班,所以我們必須要多...