The Unique MST 次小生成樹

2021-09-26 08:47:53 字數 957 閱讀 7446

題目大意:n個點,m條邊,求最小生成樹是不是唯一的。

分析:求最小生成樹是否唯一,可以把次小生成樹的權值(d2)求出來,與最小生成樹的權值(d1)比較,如果d2大於d1,說明唯一,否則不唯一。maxd[i][j]陣列存的是點i到點j的路徑中,最長的一條邊。

#include #include #include #include #include using namespace std;

#define inf 0x3f3f3f3f

typedef long long ll;

const int n = 110;

int n, m;

int pre[n], maxd[n][n];

vectorg[n];

struct edgemp[20010];

bool cmp(const edge a, const edge b)

int find(int x)

int kruskal()

sort(mp, mp + m, cmp);

int sum = 0, cnt = 0;

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

pre[x1] = x2;

for(int j = 0; j < len1; j++)

g[x2].push_back(g[x1][j]);

} }int ans = inf;

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

if(ans > sum) return sum;

return -1;

}int main()

int ans = kruskal();

if(ans != -1) printf("%d\n", ans);

else printf("not unique!\n");

} return 0;

}

The Unique MST 不嚴格的次小生成樹

aimee 好不容易得到了這個稱號,別著急摘下來 scz 你也可以不用次小生成樹做 但是也可以 次小生成樹和最小一樣大就證明不止乙個 次小生成樹要是不嚴格的話,只需要在求出的最小生成樹上,加入一條新邊,然後生成了乙個環,在這個環上呢,刪掉最大的邊就行了 然後在最小生成樹上加一點點東西就夠了 存一下任...

次小生成樹

演算法引入 設g v,e,w 是連通的無向圖,t是圖g的一棵最小生成樹 如果有另一棵樹t1,滿足不存在樹t t t1 則稱t1是圖g的次小生成樹 演算法思想 鄰集的概念 由t進行一次可行交換得到的新的生成樹所組成的集合,稱為樹t的鄰集,記為n t 設t是圖g的最小生成樹,如果t1滿足 t1 min,...

次小生成樹

分類 圖論 2013 02 12 15 03 32人閱讀收藏 舉報次小生成樹 在求最小生成樹時,用陣列path i j 來表示mst中i到j最大邊權。求完後,直接列舉所有不在mst中的邊,把它加入到mst中構成一棵新的樹,且該樹有環,此環是由剛加入的邊 i,j 造成的,所以可以通過刪除path i ...