zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    树形视图和列表视图中的HitTest
    VC++中隐藏代码
    C++指针&引用简笔
    自动化流程学习笔记
    xampp for linux遇见的几个问题
    django用户验证模块核心
    win+r 快捷
    python 获取桌面路径
    我的linux常用操作
    个人悟出的一些观点
  • 原文地址:https://www.cnblogs.com/chen74123/p/7483949.html
Copyright © 2011-2022 走看看