hdu1233-还是畅通工程

来源:互联网 发布:数据采集卡原理 编辑:程序博客网 时间:2024/05/22 07:00

还是畅通工程

最小生成树Kruscal+并查集

// File Name: hdu1233.cpp// Author: rudolf// Created Time: 2013年04月27日 星期六 15时45分12秒#include<vector>#include<list>#include<map>#include<set>#include<deque>#include<stack>#include<bitset>#include<algorithm>#include<functional>#include<numeric>#include<utility>#include<sstream>#include<iostream>#include<iomanip>#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include<ctime>using namespace std;const int maxn = 5005;int fa[ 105 ];struct node{int x , y , value;} edge[ maxn ];int cmp( const node a, const node b ){return  a.value  <  b.value;}int find( int x ){return fa[ x ] = x == fa[ x ] ? x : find( fa[ x ] );}int main(){int  n , m;int  i;while( cin >> n , n ){for( i = 0; i <= n; i++ )fa[ i ] = i;int m = ( n - 1 ) * n / 2;for( i = 1; i <= m; i++ ){cin >> edge[ i ].x >> edge[ i ].y >> edge[ i ].value;}sort( edge + 1 ,edge + m + 1, cmp );//for( i = 1 ; i <= m; i++ )//cout<<edge[i].value<<endl;int ans = 0;for( i = 1; i <= m ; i++ ){int x1 = find( edge[ i ].x );int x2 = find( edge[ i ].y );if( x1 != x2 ){fa[ x1 ] = x2;ans += edge[ i ].value;}}cout << ans << endl;}return 0;}


原创粉丝点击