道路鋪設(最小生成樹)

2021-09-21 02:16:24 字數 1391 閱讀 9468

題目描述

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

輸入描述:

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

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

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

輸入20 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

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

最小生成樹模板題,直接上**(kruskal演算法)。

#include 

#include

#include

using namespace std;

typedef long

long ll;

const

int inf=

0x3f3f3f3f

;const

int maxn=

1e5+10;

int par[

105]

;struct nodeno[maxn*4]

;void

init()

intfind

(int x)

void

unite

(int x,

int y)

bool same

(int x,

int y)

int n,m,mo;

bool cmp

(node x,node y)

intkruskal()

}return sum;

}int

main()

sort

(no,no+m,cmp)

;int p=

kruskal()

;if(p<=mo)cout<<

"yes"

"no"

<}return0;

}

道路公升級(最小生成樹KRUSKAL)

z國有 n 個城市和 m 條雙向道路,每條道路連線了兩個不同的城市,保證所有城市之間都可以通過這些道路互達。每條道路都有乙個載重量限制,這限制了通過這條道路的貨車最大的載重量。道路的編號從 1 至 m 巧合的是,所有道路的載重量限制恰好都與其編號相同。現在,要挑選出若干條道路,將它們公升級成高速公路...

JZOJ 1244 修建道路 最小生成樹

傳送門 給出n nn個點和已經建好的m mm條邊,求我們需要修建的最小代價使得n nn個點可以互相到達 正常最小生成樹隨便跑,對於已經修好的邊就直接在開始就放在乙個塊裡 include include include include include include include include d...

最小生成樹 次小生成樹

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