貪心的kruskal最小生成樹演算法

2021-06-23 04:51:11 字數 1004 閱讀 2588

description

xx星有許多城市,城市之間通過一種奇怪的高速公路sars(super air roam structure---超級空中漫遊結構)進行交流,每條sars都對行駛在上面的flycar限制了固定的speed,同時xx星人對 flycar的「舒適度」有特殊要求,即乘坐過程中最高速度與最低速度的差越小乘坐越舒服 ,(理解為sars的限速要求,flycar必須瞬間提速/降速,痛苦呀 ), 

但xx星人對時間卻沒那麼多要求。要你找出一條城市間的最舒適的路徑。(sars是雙向的)。 

input

輸入包括多個測試例項,每個例項包括: 

第一行有2個正整數n (1

output

每個尋路要求列印一行,僅輸出乙個非負整數表示最佳路線的舒適度最高速與最低速的差。如果起點和終點不能到達,那麼輸出-1。

sample input

4 4

1 2 2

2 3 4

1 4 1

3 4 2

21 3

1 2

sample output

10

貪心的kruskal最小生成樹演算法思路, 把路徑按照從小到大排序。為了讓start和end有路徑,只需要按照kruskal演算法從"最小路徑"開始構造生成樹,一旦發現start和end有連線了,那麼就表示已經構成滿足條件的那個路徑。由於路徑已經排序好,那麼此時所列舉「起點」和「滿足條件之點」之差便是最大速度與最小速度之差。

#include#include#includeusing namespace std;

#define maxn 210

#define inf 0x3f3f3f3f

int fa[maxn],ra[maxn];

int n,m,q;

struct node

}int main()

{ while(~scanf("%d%d",&n,&m))

{for(int i=0;i

貪心 最小生成樹Kruskal演算法

構造最小生成樹還有一種演算法,kurskal演算法 設g v,e 是無向連通帶權圖,v 設最小生成樹t v,te 該樹的初始狀態為只有n個頂點而無邊的非連通圖t v,kruskal演算法將這n個頂點看成是n個孤立的連通分支。它首先將所有的邊按權值從小到大排序,然後只要t中選中的邊數不到n 1,就做如...

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...