BZOJ P1821[JSOI2010]Group部落划分
来源:互联网 发布:centos 安装openjdk 编辑:程序博客网 时间:2024/05/24 02:36
直接贪心
要求最短的距离最长
就让尽量短的连在一起,然后按边长度排序之后类似于kruscal就可以了
#include<iostream>#include<fstream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int n,k,cnt;int x[1003],y[1003],father[1003];struct data{int x,y;double v;}e[1000003];inline bool cmp(data a,data b){return a.v<b.v;}void ins(int a,int b){double s=sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));e[++cnt].x=a;e[cnt].y=b;e[cnt].v=s;}int find(int x){if(x==father[x]){x;}else{father[x]=find(father[x]);}}int main(){cin>>n>>k;for(int i=1;i<=n;i++){cin>>x[i]>>y[i];}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){ins(i,j);}}sort(e+1,e+cnt+1,cmp);for(int i=1;i<=n;i++){father[i]=i;}for(int i=1;i<=cnt;i++){int fax=find(e[i].x),fay=find(e[i].y);if(fax!=fay){if(n>k){n--;father[fax]=find[e[i]-.y];}else{cout<<fixed<<setprecition(2)<<e[i].v<<endl;}}}return 0;}
0 0
- BZOJ P1821[JSOI2010]Group部落划分
- [BZOJ P1821]部落划分
- 【BZOJ 1821】 [JSOI2010]Group 部落划分 Group
- bzoj 1821: [JSOI2010]Group 部落划分 Group
- 【bzoj 1821】 [JSOI2010]Group 部落划分 Group
- BZOJ 1821 JSOI2010 部落划分 Group Kruskal
- bzoj 1821 [JSOI2010]Group 部落划分
- bzoj 1821: [JSOI2010]Group 部落划分
- BZOJ 1821 [JSOI2010]Group部落划分
- [JSOI2010]Group部落划分
- BZOJ 1821 [JSOI2010]Group 部落划分 Group 题解与分析
- bzoj 1821: [JSOI2010]Group 部落划分 Group Kruskal
- BZOJ 1821 [JSOI2010]Group 部落划分(kruskal)
- 【bzoj1821】[JSOI2010]Group 部落划分
- bzoj1821 [JSOI2010]Group 部落划分 Group
- bzoj1821: [JSOI2010]Group 部落划分 Group MST
- 【JSOI2010】【BZOJ1821】Group 部落划分 Group
- 1821: [JSOI2010]Group 部落划分 Group
- 深入理解HTTP协议
- Unity3D 从入门到放弃(五)----射箭游戏
- mysql和postgres数据库性能比较
- 打破外网插件,ngrok的使用
- python找出完数
- BZOJ P1821[JSOI2010]Group部落划分
- Docker 学习笔记
- Android Studio 快捷键
- 菜鸟爬虫-爬妹子图
- Intellij idea 创建一个简单的javaweb项目
- Android开源库集合
- c++中创建一个三维数组
- 硬盘启动笔记
- LeetCode练习-分治法