最小生成樹(改了兩個板子寫的)道路建設

2022-07-16 23:27:09 字數 1621 閱讀 9160

題目:

隨著如今社會的不斷變化,交通問題也變得越來越重要,所以市長決定建設一些公路來方便各個城市之間的**和交易。雖然市長的想法很好,但是他也遇到了一般人也經常頭疼的問題,那就是手頭的經費有限……在規劃過程中,設計師們已經預算出部分城市之間建設公路的經費需求。現在市長想知道,它能不能將他的m個城市在有限的經費內實現公路交通。如果可以的話,輸出yes,否則輸出no(兩個城市不一定要直接的公路相連,間接公路到達也可以。)

測試輸入包含多條測試資料

每個測試資料的第1行分別給出可用的經費c(<1000000),道路數目n(n<10000),以及城市數目m(<100)。

接下來的n行給出建立公路的成本資訊,每行給出三個整數,分別是相連的兩個城市v1、v2(0

示例120 10 5

1 2 6

1 3 3

1 4 4

1 5 5

2 3 7

2 4 7

2 5 8

3 4 6

3 5 9

4 5 2

yes

示例2

10 2 2

1 2 5

1 2 15

yes

兩個城市之間可能存在多條線路

題意: 將所有的城市連線起來求最小的花費是否小於總價c

思路:

最小生成樹問題:求出最小的花費就ok

ps:    如果不能把所有的城市連線起來就算no

**:

#include#include

#include

#include

#include

#include

#include

#include

#define maxn 50010

using

namespace

std;

intpar[maxn];

intranke[maxn];

void init(intn)}

int find(int x)//

找父親}

void unite(int x,int

y)    

else par[y]=x;

if(ranke[x]==ranke[y])ranke[x]++;

}bool same(int x,inty) 

struct

edge;

bool comp(const edge& e1,const edge&e2)

edge mp[maxn];

intv,e;

intres;

intflag;

intkruskal()

}return

res;

}int

main()

kruskal();

//cout

}return

0

題目很簡單,本來早就可以出的,但是由於題目理解錯誤還有沒有考慮   ps   的那種情況使這題晚了半小時出,,怎麼說呢,本來學了這麼久的圖論樹論這場可以打個很好的成績的,還是需要努力啊,畢竟這個實力太弱了了,圖論的題目還是要多刷,多藏些板子。

還有乙個學期,加油吧

最小生成樹的兩個模板

例如 要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間都可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同,因此另乙個目標是要使鋪設光纜的總費用最低。這就需要找到帶權的最小生成樹。好下面我們就直接貼 在 中有注釋能直接更快的明白最小生成樹該怎麼寫!一 prim 普里...

最小生成樹的兩種實現

kruskal演算法的實現 根據最一般的kruskal 演算法的實現原理,本人設計並實現的演算法如下 首先在此演算法中,選邊的過程中,要首先對存在邊按權值按非遞減的順序排列,以順序判斷並加入最小生成樹邊的集合。因此設計資料結構 typedef struct myedge,eptr 在此資料結構中,a...

最小生成樹 兩種常見的寫法

普利姆最小生成樹演算法 普里姆演算法 prim演算法 圖論中的一種演算法,可在加權連通圖里搜尋 最小生成樹 意即由此演算法搜尋到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點 英語 vertex graph theory 且其所有邊的權值之和亦為最小。1 輸入 乙個加權連通圖,其中頂點集合為v,...