最小生成樹 白書解題記錄

2021-10-10 10:32:49 字數 2980 閱讀 2898

prim:對點

int min,minindex;

int sum=0;

//記錄最後的答案

for(

int i =

1; i <= n; i++)}

for(

int i =

0; i < m; i++

)// for (int i = 1; i <= n; i++)

// coutfor(

int i =

1; i <= n; i++

) dis[i]

= map[start]

[i];

book[start]=1

;//for(

int i =

1; i <= n; i++)}

book[minindex]=1

; sum +

= dis[minindex]

;for

(int j =

1; j <= n ; j++)}

for(

int j =

1; j <= n; j++)}

}

kruskal:對邊

void

kruskal()

}}

poj1258

#include

#include

using

namespace std;

int mp[

105]

[105

],fa[

200500];

struct edgee[

200500];

int n;

intfind

(int x)

void

join

(int x,

int y)

}bool

cmp(edge x,edge y)

intmain()

}for

(int i=

1;i<=n;i++

)sort

(e+1

,e+tot,cmp)

; tot--

;//cout<<" t"} cout<}return0;

}

poj2377

最大生成樹+

特判最後無法聯通的情況

#include

#include

using

namespace std;

int mp[

105]

[105

],fa[

200500];

struct edgee[

200500];

int n,m;

intfind

(int x)

void

join

(int x,

int y)

}bool

cmp(edge x,edge y)

intmain()

for(

int i=

1;i<=n;i++

)sort

(e,e+m,cmp)

;//cout<<" t"}int cnt=

0,flag=1;

for(

int i=

1;i<=n;i++)}

if(flag) cout

}

poj2395

板子題記錄最小生成樹內的最大路

#include

#include

using

namespace std;

int fa[

20500];

struct edgee[

20500];

int n,m;

intfind

(int x)

void

join

(int x,

int y)

}bool

cmp(edge x,edge y)

intmain()

for(

int i=

1;i<=n;i++

)sort

(e,e+m,cmp)

;//cout<<" t"} cout

}

aoj2224

這題有點神奇,猜出的結論。。

給一張連通圖,要去掉最少的邊使得剩下的圖 圍成的圍欄 都不是封閉的

對這個圖跑最大生成樹,剩下的邊加起來就是答案

#include

#include

using

namespace std;

int fa[

10500];

struct pilep[

10005];

struct edgee[

20500];

int n,m;

intfind

(int x)

void

join

(int x,

int y)

}bool

cmp(edge x,edge y)

intmain()

for(

int i=

0;i)for

(int i=

1;i<=n;i++

)sort

(e,e+m,cmp)

;//cout<<" t"(int i=

0;idouble sum=0;

for(

int i=

0;iprintf

("%.3f"

,sum)

;return0;

}

最小生成樹解題思路

最小生成樹 乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。最小生成樹可 以用kruskal 克魯斯卡爾 演算法或prim 普里姆 演算法求出。思路 1.審題,把題目要求的邊都篩選出來 2.對邊排序 3.用並查集連邊 4.判斷有幾根...

藍書3 1 最小生成樹

t1 井 luogu 1550 題目大意 n個點 需要給每個點供水 在給第i個點供水需要花費v i 連線i號點和j號點 p ij 求給所有點供水的最小代價 思路 建立乙個新節點 對所有點連線v i 邊權的長度 然後跑kruskal 1 include2 include3 include4 inclu...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...