最小生成樹與次小生成樹

2022-06-06 03:21:08 字數 892 閱讀 7291

題意:給出兩個不同方案,每個方案使得所有的城堡被連通(形成連通圖),同時使邊權之和盡量小,問第乙個方案與第二個方案的大小關係。

解題思路:

因為m個橋能使n個城堡聯通,而兩個大爺的方案中至少存在乙個橋不相同,那麼我們判斷這是乙個求次小生成樹的方法。

求次小生成樹模板:

列舉+刪邊+再求mst複雜度有點高,看題解上面容易tle,所以採用上面鏈結裡面的那種演算法,為了複習並查集就用了kruskal,複雜度為(n*2)

#include

#include

typedef

long

long ll;

using

namespace

std;

const

int maxn = 2e5+5;

struct node

}g[maxn];

int n, m, pre[2005];

int findset(int x)

int main()

int x, y;

ll w;

for (int i = 0; i < m; i++)

int v1 = 0, v2 = 0, i, j;

sort(g, g + m);

for (i = 0; i < m; )

for (j = i; j < m && g[j].w == g[i].w; j++)

}if (v2 == n - 1) break;

}if (v2 < n - 1 || v1 > v2) printf("zin\n");

else

printf("ogisosetsuna\n");

return

0;}

最小生成樹 次小生成樹

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

最小生成樹模版與次小生成樹

prim演算法 類似於dij演算法,將每個點距離已經加入的點的集合的最短距離算出,每次取出這些距離裡最短的點加入集合,並在每次加入新的點後更新這些距離即可。演算法模版 define inf 32767 void prim mgraph g,int v krustral演算法 先將所有的邊按照邊權值排...

最小生成樹 次小生成樹 模板

次小生成樹我的理解 在最小生成樹的基礎上,列舉不再最小生陳樹上的邊,然後成環,取出一條除了新加入的那條邊外的最長邊,最終的權值即為次小生成樹的權值。小結論 當次小生成樹的權值與最小生成樹的權值相同時,最小生成樹不唯一。include include include includeusing name...