分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

BZOJ1821_[JSOI]Group部落划分_KEY

发布时间:2023-09-06 01:13责任编辑:赖小花关键词:暂无标签

题目传送门

这是一道并查集的题目,相信很多人都看出来了。

用一个类似Kurskal的东西求出最近的最大值。

对于一些可以划分在同一个部落里的边,我们一定是优先选择短边合并。

code

/************************************************************** ???Problem: 1821 ???User: yekehe ???Language: C++ ???Result: Accepted ???Time:432 ms ???Memory:9136 kb****************************************************************/ #include <bits/stdc++.h>using namespace std;int a[1001],b[1001];int n,k,now,fa[1001];double p(double x1,double x2,double y1,double y2){ ???return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);}double w[1001];struct node{ ???int x,y; ???double c;}l[500001];inline int cmp(node x,node y){return x.c<y.c;}int getf(int x){return x==fa[x]?x:fa[x]=getf(fa[x]);}int main(){ ???scanf("%d%d",&n,&k); ???????for(int i=1;i<=n;i++) ???????????scanf("%d%d",&a[i],&b[i]); ???????for(int i=1;i<=n;i++) ???????????for(int j=i+1;j<=n;j++) ???????????????l[++now].x=i,l[now].y=j,l[now].c=p(a[i],a[j],b[i],b[j]); ???sort(l+1,l+now+1,cmp); ???????for(int i=1;i<=n;i++)fa[i]=i; ???int ans=0,i; ???????for(i=1;i<=now;i++){ ???????????int x=getf(l[i].x),y=getf(l[i].y),c=l[i].c; ???????????if(x!=y){ ???????????????fa[x]=y; ???????????????w[++ans]=c; ???????????????if(ans==n-1)break; ???????????} ???????} ???printf("%.2lf",sqrt(w[n-k+1])); ???return 0;}

BZOJ1821_[JSOI]Group部落划分_KEY

原文地址:http://www.cnblogs.com/Cptraser/p/7594150.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved