最小生成樹相關性質

2022-10-09 02:48:09 字數 1249 閱讀 7930

總結幾點性質:

1.對於一張邊權互不相同的無向圖,其存在唯一的最小生成樹。

證明:這個可以反證法證明,若存在兩棵不同的最小生成樹稱為 \(t\) 和 \(t'\),記一條邊 \(e\in t ,e\not\in t'\) ,那麼顯然我們在 \(t\) 中刪去這條邊會得到兩個連通分量,而對於 \(t'\) 則存在一條邊 \(e'\) 連線兩條連通分量,且 \(e'\not \in t\) ,如果我們在 \(t\) 中斷開 \(e\) 並且連上 \(e'\) 可以得到一棵不同的生成樹。那麼由於 \(w(e)\not=w(e')\) ,這棵新樹不可能為最小生成樹。

q.e.d.

2.對於乙個無向圖,其每種最小生成樹的每種邊權的數量是一定的。

證明:對於一棵最小生成樹 \(t\) ,我們斷掉一條邊 \(e\) ,那麼我們要使得總邊權不變,要麼通過加入一條等權的邊,要麼增加一些邊,且權值和等於 \(w(e)\) ,但是這樣出現的顯然不是一棵生成樹,所以只能加入邊權相等的。

若刪除兩條邊 \(e_1,e_2\) 且 \(w(e_1),則一定加入兩條權值和與刪除的邊邊權和相等的邊 \(e_1',e_2'\),且 \(w(e_1'),如果刪除的兩條邊和加入的兩條邊權值 \(e(e_1)\) 與 \(w(e_1')\) 相等,\(w(e_2)\) 與 \(2(e_2')\) 相等,那麼可行。否則,如果 \(w(e_1')且 \(w(e_2),那麼顯然原樹 \(t\) 不為最小生成樹,矛盾。 如果 \(w(e_1')>w(e_1)\) 且 \(w(e_2)>w(e_2')\) ,\(t\) 也不為最小生成樹,矛盾。

對於多條邊的情況同理。所以可得,對於乙個無向圖,其每種最小生成樹的每種邊權的數量是一定的。

q.e.d.

我們把原來的點看作點權為 \(0\) 的點。我們做kruskal的時候,把連線的兩個點合併成乙個新點,點權為邊權,並以新點為根。然後其左右兒子分別為被合併的兩個點。

這個東西我們用並查集合並即可。

性質不難發現,原圖中兩個點之間的所有簡單路徑上最大邊權的最小值 = 最小生成樹上兩個點之間的簡單路徑上的最大值 = kruskal 重構樹上兩點之間的 lca 的權值。

因為節點的點權從根向下是單調不增的。

那麼,如果我們要查詢有多少點到 \(x\) 的簡單路徑上最大邊權的最小值 \(\le k\) ,直接找到根到 \(x\) 的路徑上,第乙個(也叫深度最淺的)權值 \(\le k\) 的點,其子樹中所以葉子都滿足上面的性質。

這個可以用來求最小瓶頸路之類的東西(最小瓶頸路:路徑上邊權最大值最小的簡單路徑)。最大瓶頸路同理,kruskal從大到小加邊即可。

最小生成樹 次小生成樹

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

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...

最小生成樹

define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...