具體思路:和判斷最小生成樹是否唯一的思路差不多,首先跑一遍最小生成樹,在求最小生成樹的過程中記錄任意兩個點之間的最大權值,然後試著暴力,如果有一條邊沒有在最小生成樹上,那麼就先加上這條邊的權值,再去減去兩個端點之間的最大權值,求乙個最小值,這就是次小生成樹。
ac**:
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
# define ll long long
# define inf 0x3f3f3f3f
# define maxn 1000+100
# define eps 1e-6
int a[maxn][maxn];
int used[maxn][maxn];
int vis[maxn];
int maxx[maxn][maxn];
int father[maxn];
int dis[maxn];
int n,m;
int mst;
void init()
}}void prim()
father[1]=-1;
for(int i=1; ia[index][j])
else if(vis[j]&&j!=index)}}
}int judge()}}
return ans;
}int main()
}mst=0;
prim();
printf("%d",mst);
printf(" %d\n",judge());
}return 0;
}
最小生成樹 次小生成樹
一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...
次小生成樹
演算法引入 設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 ...