最小生成树卡hdu1875-畅通工程再续

首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

    http://acm.hdu.edu.cn/showproblem.php?pid=1875

    这是我做过最恶心的最小生成树的标题 ,本来看有一段时间没做这个l类型的标题了,拿个标题练练手,结果。。。一全部晚上就卡这个活该的标题上面,我就想不通为什么sort会wa,但是qsort却AC了

    每日一道理
如果说友谊是一颗常青树,那么,浇灌它的必定是出自心田的清泉;如果说友谊是一朵开不败的鲜花,那么,照耀它的必定是从心中升起的太阳。 多少笑声都是友谊唤起的,多少眼泪都是友谊揩干的。友谊的港湾温情脉脉,友谊的清风灌满征帆。友谊不是感情的投资,它不需要股息和分红。(友谊可以换其他词语)
#include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

#include<cmath>

#include<stdlib.h>

using namespace std ;

const int maxn = 105 ;

struct node 

{

	int x , y ;

	double value ;

}edge[ maxn * ( maxn - 1 ) / 2 ] ;

int n ;

int fa[ maxn ] ;

int temp[ maxn ][ 2 ] ;

/*

int cmp( node a , node b )

{

	return a.value > b.value ;

}

*/

int cmp( const void *a ,const void * b )

{

	return ( (*(node*)a).value - (*(node*)b).value ) > 0 ? 1 : -1 ;

}

int find( int x )

{

	return fa[ x ] = x == fa[ x ] ? x : find( fa[ x ] ) ;

}

int main()

{

	int Case ;

	int i , j , k ;

	scanf( "%d" , &Case ) ;

	while( Case-- )

	{

		scanf( "%d" , &n ) ; 

		for( i = 1 ; i <= n ; i++ )

		{

				scanf( "%d %d" , &temp[ i ][ 0 ] , &temp[ i ][ 1 ] ) ;

				fa[ i ] = i ;

		}

		double temp1 ;

		k = 0 ;

		for( i = 1 ; i <= n ; i++ )

		{

			for( j = i + 1 ; j <= n ; j++ )

			{

				temp1 = sqrt( ( temp[ i ][ 0 ] - temp[ j ][ 0 ] ) * ( temp[ i ][ 0 ] - temp[ j ][ 0 ] ) + ( temp[ i ][ 1 ] - temp[ j ][ 1 ] ) * ( temp[ i ][ 1 ] - temp[ j ][ 1 ] ) ) ;

				if( temp1 < 10 || temp1 > 1000 )

					continue ;

				else

				{

					edge[ k ].x = i ;

					edge[ k ].y = j ;

					edge[ k ].value = temp1 ;

					k++ ;

				}

			}

		}

		//sort( edge , edge + k , cmp ) ;

		qsort( edge , k , sizeof( edge[ 0 ] ) , cmp ) ;

		int sum = 0; 

		double ans = 0.0 ;

		for( i = 0 ; i < k ; i++ )

		{

			int x1 = find( edge[ i ].x );

			int x2 = find( edge[ i ].y );

			if( x1 != x2 )

			{

				fa[ x1 ] = x2 ;

				sum++ ;

				ans += edge[ i ].value ;

			}

			if( sum == n - 1 )

				break ;

		}

		if( sum == n - 1)

		{

			printf( "%.1lf\n" ,ans * 100 ) ;

		}

		else

			printf( "oh!\n" ) ;

	}

	return 0 ;	

}

文章结束给大家分享下程序员的一些笑话语录: 不会,Intel会维持高利润,也会维持竞争局面,国外的竞争不是打死对方的那种。你看日本有尼康,佳能,索尼,都做相机,大家都过得很滋润。别看一堆厂,其实真正控制的是后面的那几个财团——有些竞争对手,后面其实是一家人。

你可能感兴趣的:(最小生成树)