还是畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 56352    Accepted Submission(s): 25580

Problem Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
 
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
 
Output
对每个测试用例,在1行里输出最小的公路总长度。
 
Sample Input

31 2 11 3 22 3 441 2 11 3 41 4 12 3 32 4 23 4 50
 
Sample Output

35

Hint

Hint

Huge input, scanf is recommended.

思路:

 

先建立一个结构体类型变量, 里面存在a,b,len 代表着城镇a与城镇b的距离是len

然后再进行结构体快排(按len从小到大排序)

最后一步进行遍历,假设存在bin[a],bin[b]的根节点不相等,那么就执行merger(合并),然后sum+=len.

最后得到的sum就是答案,当然sum首先初始化为0

附上ac:

#include<stdio.h>
#include<stdlib.h>
#define  min(a,b) a<b?a:b
struct path{
    int s,e,len;
}p[5000];
int f[110];
int find(int x)
{
    int r=f[x];
    while(r!=f[r])
        r=f[r];
    return r;
}
void merger(int x,int y)
{
    int fx,fy;
    fx=find(x);
    fy=find(y);
    f[fx]=f[fy]=f[x]=f[y]=min(fx,fy);
}
int cmp(const void *a,const void *b)
{
    return (* (struct path *)a).len-(*(struct path *)b).len;  
}
int main()
{
    int n,i,j,sum;
    while(scanf("%d",&n),n!=0)
    {
        int t=n*(n-1)/2;
        for(i=0;i<t;i++)
            scanf("%d %d %d",&p[i].s,&p[i].e,&p[i].len);
        qsort(p,t,sizeof(p[0]),cmp);
        j=0;
        for(i=1;i<=n;i++)
            f[i]=i;
        sum=0;
        for(i=0;i<t;i++)
        {   
            if(j==n-1)
                break;
            if(find(p[i].s)==find(p[i].e))
                continue;
            merger(p[i].s,p[i].e);
            sum=sum+p[i].len;
            j++;   
        }
        printf("%d\n",sum);
        /* for (i=0;i<t;i++)
             printf("%d\t%d\t%d\n",path[i].a,path[i].b,path[i].l);*/
}
    return 0;
}

hdu1233 继续畅通工程 (最小生成树——并查集)的更多相关文章

  1. 还是畅通工程(最小生成树 并查集 Prim Kruskal)

    Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只 ...

  2. hdu 1879 继续畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    ...

  3. HDU 1232 畅通工程 (并查集)

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  4. HDU 1232:畅通工程(并查集模板)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. hdu 1232 畅通工程(并查集算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others)    M ...

  6. hdu畅通工程(并查集)

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道 ...

  7. HDU1232 畅通工程---(经典并查集应用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  8. hdu 1863 畅通工程(Kruskal+并查集)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. 题解报告:hdu 1232 畅通工程(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了 ...

  10. HDU 1863 畅通工程 (并查集)

    原题链接:畅通工程 题目分析:典型的并查集模版题,这里就不详细叙述了.对算法本身不太了解的可以参考这篇文章:并查集算法详解 代码如下: #include <iostream> #inclu ...

随机推荐

  1. 实验验证stack和heap中是否被设初值

    #include <iostream> #include <stdlib.h> using namespace std; class Foo { public: int i; ...

  2. 48. Rotate Image (matrix retation, transpose) Amazon problem

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  3. 简单的PHP算法题

    简单的PHP算法题 目录 1.只根据n值打印n个0 2.根据n值打印一行 0101010101010101010101…… 3.根据n值实现1 00 111 0000 11111…… 4.根据n值实现 ...

  4. JQuery DataTable的配置项及事件

    当我们需要在加载或者显示表格的时候,改变jquery datatable 的数据,或增加一些html标签处理. 可以通过Jquery DataTable的回调函数处理. 实例代码: if (oTabl ...

  5. bzoj1264 [AHOI2006]基因匹配

    Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱 ...

  6. 【转】Android总结之drawable(hdpi,mdpi,ldpi)文件夹的使用

    做Android有段时间了,但是好多细节还没有深入理解,关于Android中drawable文件夹的使用理解的就不是很深入. Android为开发者提供了两种解决适配问题的方法,第一种方式是使用dip ...

  7. sougou输入法无法正常输入汉字

    删除~/.config目录下的SougouPY SogouPY.users sogou-qimpanel文件夹,然后重启搜狗输入法即可

  8. Spring ApplicationListener配合-D实现参数初始化

    ApplicationListener是SpringBoot的监听器,提供了四种事件: ApplicationStartedEvent :spring boot启动开始时执行的事件 Applicati ...

  9. Code First 一

    Code-First和我们的数据库优先方式是相反的,数据库优先是通过数据库映射出相应的类和上下文,Code-First测试通过创建的类和上下文得到相应的数据库. Code-First主要用于领域驱动设 ...

  10. 全文搜索引擎 Elasticsearch 安装踩坑记录

    一.安装 Elastic 需要 Java 8 环境.如果你的机器还没安装 Java 安装完 Java,就可以跟着官方文档安装 Elastic.直接下载压缩包比较简单. $ wget https://a ...