帶有度限制的最小生成樹

2022-06-01 09:45:13 字數 1010 閱讀 1630

概念:在乙個無向圖中,在某個特殊點限制了必須為k度的情況下,而求出的最小生成樹。

一些闡述

[關於字母]:

設邊集為e,特殊點為v0,最小限制生成樹為d。

hi表示v0的度數為i時的最小生成樹。

[關於操作]:

刪添操作:在樹上加入某條頂點為v0的點,在構成的環中刪掉另一條不與v0關聯的邊。

最大刪添:刪添時去掉環中最大的一條不與v0關聯的邊。

差額最大刪添:加入的邊與最大刪添的差值最大的一次刪添。

原理:見黑書p300-p303。

證明有些複雜,於是跳過證明得到定理一:

若t為v1...vn的某棵最小生成樹,若邊(i,j)不屬於t,則(i,j)不屬於d。

這樣可以大大縮小選擇邊的範圍。

定理二:

h1為t的基礎上加一條最短的(v0,vi)

h1可以通過k-1次差額最小刪添操作得到hk。

這樣可以方便我們從h1逐漸遞推到hk

具體步驟

1.找到v1...vn的所有連通塊,求出每個連通塊的最小生成樹ti。

2.在每個塊中選出一條最小的與v0相連的邊

[若塊的數目t>k則無解

],從而得到ht。

3.for

i=t+1 to k

通過hi-1 上進行「差額最小刪添操作」,新增並刪除一條邊得到hi。

其中差額最小刪添操作的優化可以用:令maxi表示vi到v0的路徑上的最大邊,那麼連上(v0,vi)的代價就是f(vi)=w(v0,vi)-maxi,所有f(vi)中的最小值就是差額最小刪添操作。

maxi的預處理需要o(n)從v0開始dfs,每次選了一條(v0,vi)後則需要從vi再跑一次,也是o(n)的。

4.輸出答案

題目練習:poj 1639

picnic planning

野餐計畫

還沒打過**...未完待續

總結 次小生成樹 最小度限制生成樹

給定一張n nn個點m mm條邊的無向圖,求無向圖的嚴格次小生成樹。設最小生成樹的邊權之和為sum sumsu m 嚴格次小生成樹就是指邊權之和大於sum sumsu m的生成樹中最小的乙個。先建出一棵最小生成樹,滿足使用的邊都是最小的,剩下的邊 稱為非樹邊 一定沒有樹邊優。如果我們加入一條非樹邊,...

最小生成樹 次小生成樹

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

最小生成樹

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