時間限制:10000ms
單點時限:1000ms
記憶體限制:256mb
描述隨著小hi擁有城市數目的增加,在之間所使用的prim演算法已經無法繼續使用了——但是幸運的是,經過計算機的分析,小hi已經篩選出了一些比較適合建造道路的路線,這個數量並沒有特別的大。
所以問題變成了——小hi現在手上擁有n座城市,且已知其中一些城市間建造道路的費用,小hi希望知道,最少花費多少就可以使得任意兩座城市都可以通過所建造的道路互相到達(假設有a、b、c三座城市,只需要在ab之間和bc之間建造道路,那麼ac之間也是可以通過這兩條道路連通的)。
輸入每個測試點(輸入檔案)有且僅有一組測試資料。
在一組測試資料中:
第1行為2個整數n、m,表示小hi擁有的城市數量和小hi篩選出路線的條數。
接下來的m行,每行描述一條路線,其中第i行為3個整數n1_i, n2_i, v_i,分別表示這條路線的兩個端點和在這條路線上建造道路的費用。
對於100%的資料,滿足n<=10^5, m<=10^6,於任意i滿足1<=n1_i, n2_i<=n, n1_i≠n2_i, 1<=v_i<=10^3.
對於100%的資料,滿足一定存在一種方案,使得任意兩座城市都可以互相到達。
輸出對於每組測試資料,輸出1個整數ans,表示為了使任意兩座城市都可以通過所建造的道路互相到達至少需要的建造費用。
樣例輸入
5 29樣例輸出1 2 674
2 3 249
3 4 672
4 5 933
1 2 788
3 4 147
2 4 504
3 4 38
1 3 65
3 5 6
1 5 865
1 3 590
1 4 682
2 4 227
2 4 636
1 4 312
1 3 143
2 5 158
2 3 516
3 5 102
1 5 605
1 4 99
4 5 224
2 4 198
3 5 894
1 5 845
3 4 7
2 4 14
1 4 185
92
現在寫程式,是不是比之前簡潔了許多^v^
#include#includeusing
namespace
std;
struct
node;
bool cmp(node a, node b)
node e[
1000001
];int par[100001
], n, m;
int find(int
x)
returnr;}
void
solve()
for (int i = 1; i <= n; i++)
sort(e, e +m, cmp);
int ans = 0
;
for (int i = 0; i < m; i++)
}cout
<< ans <}int
main()
最小生成樹二 Kruscal演算法
還是直接看輸入輸出 輸入每個測試點 輸入檔案 有且僅有一組測試資料。在一組測試資料中 第1行為2個整數n m,表示小hi擁有的城市數量和小hi篩選出路線的條數。接下來的m行,每行描述一條路線,其中第i行為3個整數n1 i,n2 i,v i,分別表示這條路線的兩個端點和在這條路線上建造道路的費用。對於...
最小生成樹二 Kruscal演算法( )
描述 每個測試點 輸入檔案 有且僅有一組測試資料。在一組測試資料中 第1行為2個整數n m,表示小hi擁有的城市數量和小hi篩選出路線的條數。接下來的m行,每行描述一條路線,其中第i行為3個整數n1 i,n2 i,v i,分別表示這條路線的兩個端點和在這條路線上建造道路的費用。對於100 的資料,滿...
最小生成樹二 Kruscal演算法
隨著小hi擁有城市數目的增加,在之間所使用的prim演算法已經無法繼續使用了 但是幸運的是,經過計算機的分析,小hi已經篩選出了一些比較適合建造道路的路線,這個數量並沒有特別的大。小ho聽到了這個問題,發表了感慨 這不就是之前最短路問題的時候針對點集變大,但是邊集很小的稀疏圖麼?和spfa演算法當時...