BZOJ-1821: [JSOI2010]Group 部落划分

作者: AmadeusChan | 来源:发表于2019-02-16 20:01 被阅读0次

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1821

把所有点对按升序排序,然后用一个并查集一个一个加进去即可。

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
 
using namespace std ;
 
#define rep( i , x ) for ( int i = 0 ; i ++ < x ; )
 
const int maxn = 1010 ;
const int maxm = maxn * maxn ;
 
int father[ maxn ] , cnt ;
 
int Find( int x ) {
        int i , j , k ;
        for ( i = x ; father[ i ] ; i = father[ i ] ) ;
        for ( j = x ; father[ j ] ; k = father[ j ] , father[ j ] = i , j = k ) ;
        return i ;
}
 
struct point {
        int x , y ;
        int dist( point a ) {
               return ( x - a.x ) * ( x - a.x ) + ( y - a.y ) * ( y - a.y ) ;
        }
} p[ maxn ] ;
 
struct edge {
        int s , t , d ;
        void oper( int _s , int _t , int _d ) {
               s = _s , t = _t , d = _d ;
        }
        bool operator < ( const edge &a ) const {
               return d < a.d ;
        }
} e[ maxm ] ;
 
int n , m = 0 , k ;
 
int main(  ) {
        scanf( "%d%d" , &n , &k ) ;
        rep( i , n ) scanf( "%d%d" , &p[ i ].x , &p[ i ].y ) ;
        cnt = n ;
        rep( i , n ) for ( int j = i ; j ++ < n ; ) {
               e[ ++ m ].oper( i , j , p[ i ].dist( p[ j ] ) ) ;
        }
        sort( e + 1 , e + m + 1 ) ;
        rep( i , m ) {
               if ( Find( e[ i ].s ) != Find( e[ i ].t ) ) {
                       father[ Find( e[ i ].s ) ] = Find( e[ i ].t ) ;
                       if ( ( cnt -- ) <= k ) {
                               printf( "%.2f\n" , sqrt( e[ i ].d ) ) ;
                               return 0 ; 
                       }
               }
        }
        return 0 ; 
}

相关文章

  • BZOJ-1821: [JSOI2010]Group 部落划分

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1821 把...

  • Odin Inspector 系列教程 --- Title Gr

    Title Group Attribute特性:用于提供一个标题Group,将对应的成员划分 【TitleGrou...

  • 用户画像的一点知识

    基本划分 自然属性 身份属性 内容偏好 兴趣分析 明星偏好 重要指标 TGI,Target Group Index...

  • 洪荒天盆迷码154

    鱼鹰和他的各部落酋长候伯把广袤的土地平均的划分给每一户部落的百姓,所有部落的人们辛勤的耕耘着肥沃的土地,这是...

  • OpenCL简介

    OpenCL是一个异构计算平台,Khronos Group将OpenCL的异构并行计算架构划分为平台模型(plat...

  • 现代思维:一切为了部落

    这是个特别有意思的话题,在跟朋友聊天的时候,讲到部落思维,从最开始的人类迁移到现在人类群体划分。部落一般指原始社会...

  • 《小西与南先生》

    小西住在一个小部落,部落很封闭,以族长为首一级一级划分。小西不喜欢这样的生活,什么见到族长要叩首,还要往脸上擦油彩...

  • 【边读边想】西周时的“市”和“里”

    1、西周时的“市” 西周时开始有明确的城乡划分。原因是周室以较少人数的部落征服人数众多的殷商王朝及周边零星小部落后...

  • GCD之dispatch_group_notify

    dispatch_group_enter(group) 和dispathc_group_leave(group) ...

  • GCD 任务组

    1、dispatch_group dispatch_group_t group = dispatch_group_...

网友评论

    本文标题:BZOJ-1821: [JSOI2010]Group 部落划分

    本文链接:https://www.haomeiwen.com/subject/vwmieqtx.html