BZOJ1821_Group部落划分_KEY
2018-06-17 21:50:53来源:未知 阅读 ()
题目传送门
这是一道并查集的题目,相信很多人都看出来了。
用一个类似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; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 【LeetCode】Reverse Nodes in k-Group(k个一组翻转链表) 2018-12-02
- 二段Linq Groupby操作 2018-06-27
- APUE 2 - 进程组(process group) 会话(session) job 2018-06-18
- 看看吧 2018-06-18
- 二段Linq Groupby操作 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash