zoukankan      html  css  js  c++  java
  • hdu 1875 畅通project再续

    链接:hdu 1875

    输入n个岛的坐标,已知修桥100元/米,若能n个岛连通。输出最小费用,否则输出"oh!"

    限制条件:2个小岛之间的距离不能小于10米,也不能大于1000米

    分析:由于岛的坐标已知,所以两两之间的距离能够算出,再推断一下距离是否符合条件

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define d 0.0001
    int f[120],n,m;
    struct stu
    {
        int a,b;
        double c;
    }t[5100];
    int cmp(struct stu x,struct stu y)
    {
        return x.c<y.c;
    }
    int find(int x)
    {
        if(x!=f[x])
            f[x]=find(f[x]);
        return f[x];
    }
    double krus()
    {
        int i,k=0,x,y;
        double s;
        for(i=1;i<=m;i++){
            x=find(t[i].a);
            y=find(t[i].b);
            if(x!=y){
                s+=t[i].c;
                k++;
                if(k==n-1)
                    break;
                f[x]=y;
            }
        }
        if(k!=n-1)
            s=-1;
        return s;
    }
    int main()
    {
        int N,i,j,k,x[120],y[120];
        double a,b,c,s;
        scanf("%d",&N);
        while(N--){
            scanf("%d",&n);
            for(i=1;i<=n;i++)
                scanf("%d%d",&x[i],&y[i]);
            for(i=1;i<=n;i++)
                f[i]=i;
            k=1;
            for(i=1;i<=n;i++)
                for(j=1;j<i;j++){               //若岛i与j连通。那j与i必定连通。存一次即可,因此循环到j<i
                    a=(double)(x[i]-x[j]);      //记得将int 转换为 double
                    b=(double)(y[i]-y[j]);
                    c=sqrt(a*a+b*b);
                    if(c>=10-d&&c<=1000+d){       //推断是否符合条件
                        t[k].a=i;
                        t[k].b=j;
                        t[k++].c=c;
                    }
                }
            m=k-1;
            sort(t+1,t+m+1,cmp);
            s=krus();
            if(s==-1)
                printf("oh!
    ");
            else
                printf("%.1lf
    ",s*100);      //保留一位小数
        }
        return 0;
    }

  • 相关阅读:
    shenduxuexizheshinian
    apk
    clion 激活码
    mongodb配置文件
    scrapy
    基于docker/虚拟机的esp32远程工作流
    Android JNI 之 环境安装
    使用lambda编写九九乘法表
    OpenFire 的安装和配置
    跟我学android-Notification
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5198922.html
Copyright © 2011-2022 走看看