【問題描述】
給出n個頂點、e條邊的連通無向簡單圖,請你完成下列任務:
任務1、求邊權和最小的生成樹(最小生成樹)
任務2、求邊權和最大的生成樹(最大生成樹)
任務3、求最大邊最小的生成樹(瓶頸生成樹)
任務4、求最小邊最大的生成樹(瓶頸生成樹)
【輸入格式】
第一行:兩個整數n,e(n<=50000,e<=100000),分別表示有n個新島,e對能直接用電纜連線的島嶼,其中主島為1。
接下來m行:每行三個數u,v,w,1<=u,v<=n,表示島嶼u和v之間可以直接用電纜連線,距離為w(<=100000)。
【輸出格式】
第一行乙個整數,表示最小生成樹的邊權和;
第二行乙個整數,表示最大生成樹的邊權和;
第三行乙個整數,表示最大邊最小的生成樹中,最大邊的權值;
第四行乙個整數,表示最小邊最大的生成樹中,最小邊的權值;
【輸入樣例】
5 8
1 2 2
1 3 12
1 4 10
2 3 8
2 5 9
3 4 6
3 5 3
4 5 7
【輸出樣例】
19 39 8 8
【資料範圍】
n<=50000,e<=100000
用並查集的方法,用貪心的思想從一頭開始加邊。
詳見**解釋:
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=50005;
struct shu
;vector
g;int n,m,fa[maxn];
bool my(shu a,shu b)
); }
sort(g.begin(),g.end(),my);
}void in()
int find(int x)
int main()
}printf("%d\n",ans);
t=n-1;
ans=0;
int p;
in();
for(int i=g.size()-1;i>=0;i--)
}printf("%d\n%d\n%d",ans,q,p);
return
0;}
Kruskal演算法(貪心 並查集 最小生成樹)
kruskal演算法 克魯斯卡爾 演算法 的高效實現需要一種稱作並查集的結構。我們在這裡不介紹並查集,只介紹kruskal演算法的基本思想和證明,實現留在以後討論。kruskal演算法的過程 1 將全部邊按照權值由小到大排序。2 按順序 邊權由小到大的順序 考慮每條邊,只要這條邊和我們已經選擇的邊不...
Kruskal演算法(貪心 並查集 最小生成樹)
2016年04月16日 17 34 35 kruskal演算法的高效實現需要一種稱作並查集的結構。我們在這裡不介紹並查集,只介紹kruskal演算法的基本思想和證明,實現留在以後討論。kruskal演算法的過程 1 將全部邊按照權值由小到大排序。2 按順序 邊權由小到大的順序 考慮每條邊,只要這條邊...
並查集 最小(最大)生成樹
首先給出並查集基本 int fa maxn rank maxn 基礎陣列,fa陣列儲存上乙個節點,rank表示節點級數 比較少用 初始化 void init int n 查詢 int find int x void combine int a,int b 判斷 bool issame int a,i...