首页 > 其他 > 详细

bzoj2429 [HAOI2006]聪明的猴子

时间:2016-01-22 17:46:50      阅读:189      评论:0      收藏:0      [点我收藏+]

题目链接

kruskal最小生成树,只不过在坐标系上

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<string>
 5 #include<cstring>
 6 #include<cmath>
 7 #include<algorithm>
 8 #include<ctime>
 9 #include<queue>
10 #include<stack>
11 #include<map>
12 #include<set>
13 using namespace std;
14 int getint()
15 {
16     int ret=0,f=1;
17     char ch=getchar();
18     while(ch<0||ch>9)
19     {
20         if(ch==-)f=0;
21         ch=getchar();
22     }
23     while(ch>=0&&ch<=9)ret*=10,ret+=ch-0,ch=getchar();
24     return f==0?-ret:ret;
25 }
26 struct bian
27 {
28     int x,y,v;
29     bool operator < (const bian &a)const
30     {
31         return v<a.v;
32     }
33 }bi[500050];
34 int Max,n,m,ed,ans,tot,a[555],x[1010],y[1010],fa[1010];
35 int find(int x)
36 {
37     return x==fa[x]?x:fa[x]=find(fa[x]);
38 }
39 int main()
40 {
41     n=getint();
42     for(int i=1;i<=n;i++)a[i]=getint();
43     m=getint();
44     for(int i=1;i<=m;i++)fa[i]=i,x[i]=getint(),y[i]=getint();
45     for(int i=1;i<=m;i++)
46         for(int j=i+1;j<=m;j++)
47             bi[++ed].x=i,bi[ed].y=j,bi[ed].v=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
48     sort(bi+1,bi+ed+1);
49     for(int i=1;i<=ed;i++)
50     {
51         int q=find(bi[i].x),w=find(bi[i].y);
52         if(q!=w)
53         {
54             fa[q]=w;
55             tot++;
56             if(tot==m-1)
57             {
58                 Max=bi[i].v;
59                 break;
60             }
61         }
62     }
63     for(int i=1;i<=n;i++)if(a[i]*a[i]>=Max)ans++;
64     printf("%d",ans);
65     return 0;
66 }

 

bzoj2429 [HAOI2006]聪明的猴子

原文:http://www.cnblogs.com/HugeGun/p/5151636.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!