bzoj 1821: [JSOI2010]Group 部落划分 Group

Posted Alex丶Baker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 1821: [JSOI2010]Group 部落划分 Group相关的知识,希望对你有一定的参考价值。

1821: [JSOI2010]Group 部落划分 Group

 

最小生成树

技术分享
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<queue>
 6 #include<cmath>
 7 #include<map>
 8 using namespace std;
 9 #define maxn 1100000
10 int n,m,k,x[maxn],cnt,y[maxn],tot; 
11 int num,w[2333][2333],fa[maxn];
12 double ans[maxn];
13 struct Edge{
14     int l,r;
15     double w;
16 }edge[maxn];
17 
18 char ch;
19 inline void read(int &now)
20 {
21     ch=getchar(); now=0;
22     while(ch>9||ch<0) ch=getchar();
23     while(ch>=0&&ch<=9) now=now*10+ch-0,ch=getchar();
24 }
25 int find(int x)    { return fa[x]==x?x:fa[x]=find(fa[x]); }
26 void add_edge(int l,int r)
27 {
28     edge[++num].l=l;
29     edge[num].r=r;
30     edge[num].w=sqrt(pow(x[l]-x[r],2)+pow(y[l]-y[r],2));
31 }
32 
33 bool cmp(Edge a,Edge b) { return a.w<b.w; }
34 bool cmp2(double a,double b) { return a>b; }
35 int main()
36 {
37 //    freopen("people.in","r",stdin);
38 //    freopen("people.out","w",stdout);
39     read(n); read(k);
40     for(int i=1;i<=n;i++) read(x[i]),read(y[i]);
41     for(int i=1;i<=n;i++)
42         for(int j=i+1;j<=n;j++)
43             add_edge(i,j);
44     for(int i=1;i<=n;i++) fa[i]=i;
45     sort(edge+1,edge+num+1,cmp);
46     for(int i=1;i<=num;i++)
47     {
48         int fx=find(edge[i].l),fy=find(edge[i].r);
49         if(fx!=fy)
50         {
51             fa[fx]=fy;
52             tot++;
53             ans[++cnt]=edge[i].w;
54             if(tot==n-1) break;
55         }
56     }
57     sort(ans+1,ans+n+1,cmp2);
58     printf("%.2lf",ans[k-1]);
59     return 0;
60 }
61 /*
62 5 3
63 5 9
64 7 5
65 2 5
66 3 5
67 6 9
68 */
View Code

 

以上是关于bzoj 1821: [JSOI2010]Group 部落划分 Group的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 1821: [JSOI2010]Group 部落划分 Group

BZOJ-1821: [JSOI2010]Group 部落划分 Group (二分+并查集)

[Bzoj1821][JSOI2010]Group 部落划分 Group(并查集)(二分答案)

BZOJ1821 [JSOI2010]Group 部落划分 Group Kruscal

BZOJ_1821_[JSOI2010]_部落划分_(贪心,并查集)

BZOJ 1821 [JSOI2010] Group 部落划分 Group