HDU - 1233 [还是畅通工程 ] 最小生成树Kruskal
2017-07-14 11:29
375 查看
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
Huge input, scanf is recommended.
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
Huge input, scanf is recommended.
solution: MST-Kruskal
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define N 10010 int fat ; struct Node{ int a, b, pri; }; int n, m; Node aa ; int getf( int x){ return (fat[x] == x) ? x : fat[x] = getf(fat[x]); } void unite( int x, int y ){ fat[ getf(x) ] = getf( y ); } int cmp( Node x, Node y ){ return x.pri < y.pri; } int Kruskal(){ int nE = 0, res = 0; sort( aa+1, aa+1+m, cmp); for ( int i = 1; i <= m; i++){ if ( getf(aa[i].a) != getf( aa[i].b) ){ unite( aa[i].a, aa[i].b ); res += aa[i].pri; nE++; } if ( nE == n-1 ) return res; } return 0; } int main(){ while (~scanf( "%d", &n ) && n ){ m = n*(n-1)/2; for ( int i = 1; i <= m; i++){ int a, b, c; scanf( "%d%d%d", &a, &b, &c); aa[i].a = a, aa[i].b = b, aa[i].pri = c; } for ( int i = 1; i <= n; i++) fat[i] = i; printf( "%d\n", Kruskal()); } }
相关文章推荐
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- hdu 1233 还是畅通工程(kruskal求最小生成树)
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- 【最小生成树+kruskal】杭电 hdu 1233 还是畅通工程
- HDU 1233-还是畅通工程(经典的最小生成树, Kruskal和prim算法)
- HDU 1233 还是畅通工程 (最小生成树 Kruskal)
- hdu 1233 还是畅通工程 (最小生成树,prim,优先队列,kruskal并查集)
- hdu 1233 还是畅通工程(prim和kruskal最小生成树)
- hdu1233 还是畅通工程 最小生成树(kruskal算法)
- HDU 1233 还是畅通工程 最小生成树Kruskal算法和prim算法
- HDU 1233 还是畅通工程 (很简单的并查集&&最小生成数)
- HDU 1233 还是畅通工程 最小生成树 Prim模板的应用
- 杭电 1233 还是畅通工程 【最小生成树&&Kruskal】
- 最小生成树 HDU 1233 还是畅通工程
- 图论 生成树 HDU 1233 还是畅通工程 Kruskal
- hdu 1233 还是畅通工程【最小生成树】
- 最小生成树 Kruscal与Prime HDU 1233 还是畅通工程 HDU 1301 Jungle Roads
- 【最小生成树+Prim】杭电 hdu 1233 还是畅通工程
- Num 32 : HDOJ : 1233 还是畅通工程 [ kruskal( 克鲁斯卡尔 )算法 ] [ 最小生成树 ]