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

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

    kruskal算法: 140MS

    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<math.h>
     4 struct node
     5 {
     6     int x, y ;
     7     double z ;
     8 }b[6000] ;
     9 int set[101], i ;
    10 double sum ;
    11 int cmp(const void *a, const void *b)
    12 {
    13    struct node *p1, *p2 ;
    14    p1 = (struct node*)a ;
    15    p2 = (struct node*)b ;
    16    return p2->z > p1->z ? -1 : 1 ;
    17 }
    18 int find(int x)
    19 {
    20     if(set[x]!=x)
    21     set[x] = find(set[x]) ;
    22     return set[x] ;
    23 }
    24 void merge(int x,int y)
    25 {
    26     int fx,fy;
    27     fx=find(x);
    28     fy=find(y);
    29     if(fx!=fy)
    30     {
    31         set[fx]=fy;
    32         sum+=b[i].z;
    33     }
    34 }
    35 int main()
    36 {
    37     int t,c,j,k,cnt;
    38     int a[101][2];
    39     double s;
    40     scanf("%d",&t);
    41     while(t--)
    42     {
    43         scanf("%d",&c);
    44         for(i=0;i<c;i++)
    45         scanf("%d%d",&a[i][0],&a[i][1]);
    46         for(i=0;i<c;i++)
    47         set[i]=i;
    48         k=0; s=0;
    49         for(i=0; i<c; i++)
    50         for(j=i+1; j<c; j++)
    51             {
    52                s=sqrt((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1]));
    53                if(s>=10 && s<=1000)
    54                  {
    55                     b[k].x=i;
    56                     b[k].y=j;
    57                     b[k].z=s;
    58                     s=0;
    59                     k++;
    60                  }
    61             }
    62           qsort(b,k,sizeof(b[0]),cmp);
    63           sum=0;
    64           for(i=0;i<k;i++)
    65           merge(b[i].x,b[i].y);
    66           cnt=0;
    67           for(i=0;i<c;i++)
    68           if(set[i]==i)
    69           cnt++;
    70           if(cnt==1)
    71           printf("%.1lf\n",100*sum);
    72           else
    73           printf("oh!\n");
    74     }
    75     return 0 ;
    76 }


    prim算法:15MS

    View Code
     1 #include<stdio.h>
     2 #include<math.h>
     3 #define N 110
     4 #define max 9999999
     5 double g[N][N];
     6 void prim(int n)
     7 {
     8     int i,j,u,flag,mark[N];
     9     double dis[N],cost,min;
    10     for(i=0;i<n;i++)
    11     {
    12         mark[i]=0;
    13         dis[i]=g[0][i];
    14     }
    15     mark[0]=1;
    16     cost=0;
    17     flag=1;
    18     for(i=1;i<n;i++)
    19     {
    20         min=max;
    21         for(j=1;j<n;j++)
    22             if(!mark[j]&&min>dis[j])
    23             {
    24                 u=j;
    25                 min=dis[j];
    26             }
    27         if(min==max||min<10)
    28         {
    29             flag=0;
    30             break;
    31         }
    32         mark[u]=1;
    33         cost+=min;
    34         for(j=1;j<n;j++)
    35             if(!mark[j]&&dis[j]>g[u][j])
    36                 dis[j]=g[u][j];
    37     }
    38     if(flag)
    39         printf("%.1f\n",100*cost);
    40     else
    41         printf("oh!\n");
    42 }
    43 int main()
    44 {
    45     int i,j,m,n,x[N],y[N];
    46     double dis,x2,y2;
    47     scanf("%d",&m);
    48     while(m--)
    49     {
    50         scanf("%d",&n);
    51         for(i=0;i<n;i++)
    52             scanf("%d%d",&x[i],&y[i]);
    53         for(i=0;i<n;i++)
    54             for(j=0;j<=i;j++)
    55             {
    56                 x2=(x[i]-x[j])*(x[i]-x[j]);
    57                 y2=(y[i]-y[j])*(y[i]-y[j]);
    58                 dis=sqrt(x2+y2);
    59                 if(dis<10||dis>1000)
    60                     g[j][i]=g[i][j]=max;
    61                 else
    62                     g[i][j]=g[j][i]=dis;
    63             }
    64         prim(n);
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    python的进阶--爬虫小试
    【centos 7】搭FTP服务和web访问
    centos 7 安装python3.5
    centos 6.5 安装mysql 5.6.35--libc.so.6(GLIBC_2.14)(64bit)
    windows 10 下安装python 2.7
    centos7-硬盘坏道检测
    centos7 默认进入系统命令行模式修改
    zabbix安装配置(2.4.5)
    Centos 7 mysql 安装使用记
    docker部署angular和asp.net core组成的前后端分离项目
  • 原文地址:https://www.cnblogs.com/yelan/p/2948614.html
Copyright © 2011-2022 走看看