模板 最小生成樹Prim 4heap

2022-04-30 23:51:16 字數 1308 閱讀 7205

基本介紹

模板題目

**實現

終於來填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 ...