博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1821
阅读量:5901 次
发布时间:2019-06-19

本文共 1230 字,大约阅读时间需要 4 分钟。

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

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

把每个点看成一个部落

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

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

1 type node=record 2        x,y:longint; 3        w:double; 4      end; 5  6 var a:array[0..500010] of node; 7     fa,d,x,y:array[0..2010] of longint; 8     k,i,j,k1,k2,m,n:longint; 9 10 function getf(x:longint):longint;11   begin12     while fa[x]<>x do x:=fa[x];13     exit(x);14   end;15 16 procedure swap(var a,b:node);17   var c:node;18   begin19     c:=a;20     a:=b;21     b:=c;22   end;23 24 procedure sort(l,r:longint);25   var i,j:longint;26       x:double;27 28   begin29     i:=l;30     j:=r;31     x:=a[(l+r) shr 1].w;32     repeat33       while a[i].w
j) then36       begin37         swap(a[i],a[j]);38         inc(i);39         j:=j-1;40       end;41     until i>j;42     if l
k2 then70     begin71       if d[k1]>d[k2] then fa[k2]:=k172       else begin73         fa[k1]:=k2;74         if d[k1]=d[k2] then inc(d[k2]);75       end;76       dec(j);77     end;78     if j=k-1 then  //剩下k个部落后,下一条【不同】部落之间的边才是答案79     begin80       writeln(a[i].w:0:2);81       break;82     end;83   end;84 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473201.html

你可能感兴趣的文章
平衡二叉树(AVL树)
查看>>
面向对象思想(第一天)
查看>>
微信小程序 js逻辑
查看>>
linux 安装 sftp
查看>>
openStack queens
查看>>
(转)EOSIO开发(四)- nodeos、keosd与cleos
查看>>
MVC5+EF6 入门完整教程八
查看>>
Java 设计模式专栏
查看>>
常用Mysql或者PostGresql或者Greenplum的语句总结。
查看>>
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
appium 报错
查看>>
phpquery中文手册
查看>>
微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
查看>>
【转】C++ 笔试面试题目
查看>>
同步和异步的区别
查看>>
在ASP.NET MVC控制器中获取链接中的路由数据
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
多线程一个错误的例子
查看>>
默认网关及route print
查看>>