题目要求最近的两个部落间距尽可能最远

不难想到一种贪心的方法,对每两个点之间距离从小到大排序,

把每个点看成一个部落

然后不断将距离近的两个部落合并成一个部落,直到剩下了k个部落,那么下一条不同部落之间的边的长度就是答案

显然这个算法是用并查集实现

 type node=record
       x,y:longint;
       w:double;
     end; var a:array[..] of node;
    fa,d,x,y:array[..] of longint;
    k,i,j,k1,k2,m,n:longint; function getf(x:longint):longint;
  begin
    while fa[x]<>x do x:=fa[x];
    exit(x);
  end; procedure swap(var a,b:node);
  var c:node;
  begin
    c:=a;
    a:=b;
    b:=c;
  end; procedure sort(l,r:longint);
  var i,j:longint;
      x:double;   begin
    i:=l;
    j:=r;
    x:=a[(l+r) shr ].w;
    repeat
      while a[i].w<x do inc(i);
      while x<a[j].w do dec(j);
      if not(i>j) then
      begin
        swap(a[i],a[j]);
        inc(i);
        j:=j-;
      end;
    until i>j;
    if l<j then sort(l,j);
    if i<r then sort(i,r);
  end; begin
  readln(n,k);
  for i:= to n do
    readln(x[i],y[i]);
  for i:= to n- do
    for j:=i+ to n do
    begin
      inc(m);
      a[m].x:=i;
      a[m].y:=j;
      a[m].w:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
    end;
  sort(,m);
  for i:= to n do
  begin
    fa[i]:=i;
    d[i]:=;
  end;
  j:=n;
  for i:= to m do
  begin
    k1:=getf(a[i].x);
    k2:=getf(a[i].y);
    if k1<>k2 then
    begin
      if d[k1]>d[k2] then fa[k2]:=k1
      else begin
        fa[k1]:=k2;
        if d[k1]=d[k2] then inc(d[k2]);
      end;
      dec(j);
    end;
    if j=k- then  //剩下k个部落后,下一条【不同】部落之间的边才是答案
    begin
      writeln(a[i].w::);
      break;
    end;
  end;
end.

bzoj1821的更多相关文章

  1. 【BZOJ1821】[JSOI2010]部落划分(二分,并查集)

    [BZOJ1821][JSOI2010]部落划分(二分,并查集) 题面 BZOJ 洛谷 题解 二分答案,把距离小于二分值的点全部并起来,\(\mbox{check}\)一下是否有超过\(K\)个集合就 ...

  2. BZOJ1821 [JSOI2010]Group 部落划分 Group Kruskal

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1821 题意概括 平面上有n个点,现在把他们划分成k个部分,求不同部分之间最近距离的最大值. 两个部 ...

  3. C++之路进阶——bzoj1821(部落划分)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  hyxzc Logout 捐赠本站 Notice:1:由于本OJ建 ...

  4. BZOJ1821: [JSOI2010]Group 部落划分

    这题乍看很吓人,其实就是一个贪心. 每次取最近的两个点所在的块合并,直到只剩下k块,输出答案. /*************************************************** ...

  5. bzoj1821: [JSOI2010]Group 部落划分 Group

    kruskal算法. #include<cstdio> #include<algorithm> #include<cstring> #include<cmat ...

  6. 【最小生成树+贪心】BZOJ1821: [JSOI2010]Group 部落划分 Group

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  7. BZOJ1821:[JSOI2010]部落划分(并查集,二分)

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  8. 【bzoj1821】[JSOI2010]Group 部落划分 Group Kruskal

    题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成为谜团了——聪 ...

  9. BZOJ1821 [JSOI2010]Group 部落划分 Group 【最小生成树】

    题目 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成为谜团了--聪聪根 ...

随机推荐

  1. Golang中解析json,构造json

    json解析是如今(网络)应用程序开发中最不可或缺的一环了.许多语言需要库支持才可以解析.构造json,但Golang凭借着原生库就可以很好地做到这一点. json的基本表现形式有两个:struct与 ...

  2. Java获取方法参数名、Spring SpEL解析

    @Test public void testParse() { //表达式解析 ExpressionParser expressionParser = new SpelExpressionParser ...

  3. 03_线程的创建和启动_实现Runnable接口方式

    [线程的创建和启动的步骤(实现Runnable接口方式)] 1.定义Runnable接口的实现类,并重写其中的run方法.run()方法的方法体是线程执行体. class SonThread  imp ...

  4. c# DataTable 中 Select 和 Clone 用法结合

    C# DataTable是存放数据的一个离线数据库,将数据一下加载到内存. DataTable.Select ()方法: Select();//全部查出来    Select(过滤条件);//根据过滤 ...

  5. KMP(匹配)

    Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据, ...

  6. js闭包的使用例子

    网上关于闭包的介绍太多,这就导致了泛滥,对于新手来说,网上好多讲解就说了闭包是啥,还都是用下面这种例子: 我的天啊,我们都看了不知道多少遍了,看完有啥用?在什么场合下用啊? 于是我翻阅各种资料,自己总 ...

  7. 银行卡号Luhm校验Java实现代码

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class CheckBankNumber { //Des ...

  8. jquery全选,jquery全不选,jquery反选

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 大型B/S系统技术总结(不断更新)

    看了<淘宝技术这十年>和<大型网站系统与Java中间件实践>这些书,对大型B/S系统的构建越来越感兴趣,于是尝试收集和总结一些常用的技术手段.不过大型网站的架构是根据业务需求不 ...

  10. 大话F#和C#:是否会重蹈C#失败的覆辙?

    F#.net 出来有些年头儿了,将从 VS 2010 起在 .net framework 平台上以“一等公民”身份粉墨登场的它,将会给计算机科技与软件工业带来哪些悲喜剧呢? F# 将扮演一个什么角色? ...