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

    题意:省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。(仍然是最小生成树问题)

    #include"stdio.h"
    #include"stdlib.h"
    struct e
    {
       int x,y,v;      
    }val[10500];
    int set[105],n,m,sum;
    int cmp(const void *a,const void *b)
    {
         return  ((e *)a)->v-((e *)b)->v; 
    }
    int find(int t)
    {
        return  t==set[t]?t:set[t]=find(set[t]);   
    }
    void Kustra()
    {
         for(int i=1;i<=m;++i)
         {
             int a=val[i].x,b=val[i].y,v=val[i].v;
             if(find(a)!=find(b))
             {
                   set[find(a)]=b;//开始时将find(a)写成a,WA了几次我就纳闷了,原来出现了这种错误;为了避免出现这样的问题将if语句前加 a=find(a),b=find(b);这里用a;
                   sum+=v;
             }
         }
    }
    int main()
    {
        while(scanf("%d",&n),n)
        {
                 sum=0;
                 m=n*(n-1)/2;
                 for(int i=0;i<=n;++i)
                    set[i]=i;
                 for(int i=1;i<=m;++i)
                 {
                      int p;
                      scanf("%d%d%d%d",&val[i].x,&val[i].y,&val[i].v,&p);
                      if(p)
                          set[find(val[i].x)]=find(val[i].y);
                 }
                 qsort(val,m,sizeof(val[1]),cmp);
                 Kustra( );
                 int c=0;
                 /*for(int i=1;i<=n;++i)
                 {
                     if(set[i]==i)
                        ++c;       
                 }*/  //这里可以不要,一样可以AC,不影响;
                 printf("%d\n",sum);                       
        }   
        return  0;
    }
  • 相关阅读:
    自动生成 Makefile 的全过程详解
    cpio实例讲解
    RPM命令手册
    SSHFS
    shell脚本命令行参数传递问题
    批量改名总结
    例解 autoconf 和 automake 生成 Makefile 文件
    Shell中的shift命令
    cpio命令详解
    Git笔记基础
  • 原文地址:https://www.cnblogs.com/QQbai/p/2131091.html
Copyright © 2011-2022 走看看