zoukankan      html  css  js  c++  java
  • 畅通工程再续

    这题竟然出错在了快排上,对double类型的数据排序,

    return a>b?1:-1;

    如果还是减的话则会造成数据丢失

    http://acm.hdu.edu.cn/showproblem.php?pid=1875

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    using namespace std;
    int n,tt;
    int tx[102],ty[102];
    struct node
    {
        int x,y;
        double w;
    }edge[101*100/2+1];
    int bin[102];
    void add(int u,int v,double w1)
    {
        edge[tt].x=u;
        edge[tt].y=v;
        edge[tt].w=w1;
        tt++;
    }
    int cmp(const void *a,const void *b)
    {
        return (*(struct node *)a).w>(*(struct node *)b).w?1:-1;
    }
    int findx(int x)
    {
        int r=x;
        while(r!=bin[r])
            r=bin[r];
        int j,k;
        j=x;
        while(j!=r)
        {
            k=bin[j];
            bin[j]=r;
            j=k;
        }
        return r;
    }
    void merge(int x,int y)
    {
        int fx=findx(x);
        int fy=findx(y);
        if(fx!=fy)
            bin[fx]=fy;
    }
    void Kuscal()
    {
        double sum=0;
        int ll=1;//最小生成树n-1条边
        int i=0;
        while(ll<n&&i<tt)
        {
            if(ll==n) break;
            if(findx(edge[i].x)!=findx(edge[i].y))
            {
                merge(findx(edge[i].x),findx(edge[i].y));
                sum=sum+edge[i].w;
                ll++;
            }
            i++;
        }
        if(ll==n)
        printf("%.1lf
    ",sum);
        else printf("oh!
    ");
    
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            tt=0;
            for(int i=1;i<=n;i++)
                bin[i]=i;
           for(int i=1;i<=n;i++)
            {
                scanf("%d%d",&tx[i],&ty[i]);
            }
            double r;
            for(int i=1;i<=n;i++)
            {
                for(int j=i+1;j<=n;j++)
                {
                    r=sqrt(pow(tx[i]-tx[j],2)+pow(ty[i]-ty[j],2));
                    if(r>=10&&r<=1000)
                        add(i,j,r*100);
                }
            }
            qsort(edge,tt,sizeof(edge[0]),cmp);
           Kuscal();
        }
        return 0;
    }
    

     

  • 相关阅读:
    HU 参考错误修正:/SCWM/RCORR_HUREF
    EWM 强大的数据修复功能
    EWM ODO清理功能
    发布EWM RF ITS Mobile 相关服务
    git上传本地Intellij idea 项目到码云的git仓库中
    linux 学习一:安装jdk和tomcat
    bootstrap-datepicker应用
    vue2 枚举类型转换
    jqGrid时间转换
    (原创)Rocketmq分布式消息队列的部署与监控
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3809593.html
Copyright © 2011-2022 走看看