基本介紹
模板題目
**實現
終於來填prim的坑了 **實現和最短路的dijkstra差不多 也用的堆優化
大體意思就是說 現在圖中選取乙個藍點染成白色 然後遍歷與這個點相連的所有邊 選取最短的邊然後將另乙個端點染成白色 再遍歷這個點 從所有白點中找最短的 一直這樣下去 stl小根堆比較好 便於每次找短的
題目描述
如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz
輸入輸出格式
輸入格式:
第一行包含兩個整數n、m,表示該圖共有n個結點和m條無向邊。(n<=5000,m<=200000)
接下來m行每行包含三個整數xi、yi、zi,表示有一條長度為zi的無向邊連線結點xi、yi
輸出格式:
輸出包含乙個數,即最小生成樹的各邊的長度之和;如果該圖不連通則輸出orz
輸入輸出樣例
輸入樣例:
4 5
1 2 2
1 3 2
1 4 3
2 3 4
3 4 3
輸出樣例:
7
#include
#include
#include
#include
using
namespace
std;
#define in = read()
typedef
long
long ll;
const ll size = 1000000 + 10000;
struct pointedge[size];
priority_queue, vector
> , greater> > q;
ll n,m;
ll site,ans,total,u;
ll head[size];
bool exist[size];
inline ll read()
while(isdigit(ch))
return num*f;
}inline
void add(ll x,ll y,ll z)
int main()
pairx;
q.push(make_pair(0,1));
while(!q.empty() && total != n - 1)
printf("%d",ans);
}//coyg
最小生成樹prim模板
1.模板一 此段模板取自 挑戰程式設計競賽 p106 107 int cost inf inf 邊 int used inf int mincost inf x到節點v的最小值 int v int prim mincost 0 0 int res 0 while 1 if v 1 break use...
最小生成樹 Prim演算法(模板)
基本演算法 首先以乙個結點作為最小生成樹的初始結點,然後以迭代的方式找出與最小生成樹中各結點權重最小邊,並加入到最小生成樹中。選擇一條權值最小,且一端點a已加入生成樹,另一端點b在剩餘結點集內的邊作為最小生成樹上的邊,同時將b列入生成樹的已有點集中。當所有結點都加入到最小生成樹中之後,就找出了連通圖...
最小生成樹prim演算法模板
include using namespace std const int inf 0x3f3f3f3f 最大值,方便計算 int n,m n是點的個數,m是邊的數量 int dis 105 vis 105 dis是判斷未加入生成樹的頂點到已知生成樹的最短距離,vis判斷是否已經加入生成樹 int ...