BZOJ 2429: [HAOI2006]聪明的猴子|最小生成树kruskal
2016-01-12 14:15
323 查看
裸题
#include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<queue> #include<vector> #include<set> #include<map> #include<iostream> #include<algorithm> #define T 1010 using namespace std; int sc() { int i=0,f=1; char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f; } struct E{int x,y;double d;}e[T*T]; int x[T],y[T],L[T],fa[T],mx; int m,n,tot=0,sum=0,ans; bool cmp(E a,E b){return a.d<b.d;} int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);} int main() { m=sc(); for(int i=1;i<=m;i++)L[i]=sc(); n=sc(); for(int i=1;i<=n;i++) { x[i]=sc(),y[i]=sc(); for(int j=1;j<i;j++) { e[++tot].x=j; e[tot].y=i; e[tot].d=sqrt((double)(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } fa[i]=i; } sort(e+1,e+tot+1,cmp); for(int i=1;i<=tot;i++) { int p=find(e[i].x),q=find(e[i].y); if(p!=q) { sum++; fa[p]=q; if(sum==n-1)mx=e[i].d; } } for(int i=1;i<=m;i++) if((double)L[i]>=mx)ans++; cout << ans; return 0; }
相关文章推荐
- tomcat的acess_log打印post请求参数,分析日志
- Java Lambda表达式
- 轻松实现Bootstrap图片轮播
- python的 __name__和__doc__属性
- 关于浮动和position的小知识点
- varnish配置详解
- android 禁用和开启四大组件的方法(setComponentEnabledSetting )?
- 日经春秋 20160112
- sql 清空某个字段
- 自学Python二 Python中的屠龙刀(续)
- gridview ItemTemplate下绑定数据
- NEST与JSON语法对照 一 match与multi_match
- MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
- 天声人語 20160112 歴史は2度繰り返す?
- 史上最全Android Studio快捷键 汇总
- 读书笔记:Java并发实战第15章 原子变量与非阻塞同步机制
- qtcreator +vs2013 开发xp下使用的程序
- Linux设备模型(1)_基本概念
- docker image 与 container
- ios之UIScrollerView滚动视图