題目:
隨著如今社會的不斷變化,交通問題也變得越來越重要,所以市長決定建設一些公路來方便各個城市之間的**和交易。雖然市長的想法很好,但是他也遇到了一般人也經常頭疼的問題,那就是手頭的經費有限……在規劃過程中,設計師們已經預算出部分城市之間建設公路的經費需求。現在市長想知道,它能不能將他的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 21 2 5
1 2 15
yes
兩個城市之間可能存在多條線路最小生成樹問題:求出最小的花費就ok題意: 將所有的城市連線起來求最小的花費是否小於總價c
思路:
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,...