还是畅通工程

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. oracle 12c使用dblink克隆pdb

    Multitenant : Hot Clone a Remote PDB or Non-CDB in Oracle Database 12c Release 2 (12.2)https://oracl ...

  2. css渲染(三)颜色与背景

    颜色的应用主要分为前景色.背景色和透明三个部分. 一.前景色 color color前景色 值: <color> | inherit 初始值: 用户代理特定的值 应用于: 所有元素 继承性 ...

  3. 数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2···am),(b1,b2···bn),将两个顺序表位置互换

    将数组中的两个顺序表位置互换,即将(b1,b2···bn)放到(a1,a2···am)前边. 解法一: 将数组中的全部元素(a1,a2,···am,b1,b2,···bn)原地逆置为(bn,bn-1, ...

  4. html5 5个重要特性

    HTML5已经火了一段时间了,相信作为web相关开发project师,肯定或多或少的了解和尝试过一些HTML5的特性和编程.还记得曾经我们介绍过的HTML5新标签. 作为未来前端开发技术的潮流和风向标 ...

  5. 行高 line-height

    一.行高的定义 line-height(行高):两行文字基线之间的距离 1.什么是基线? 2.为何是基线? 3.需要两行吗? 1.什么是基线? 我们上学的时候都用过,抄写英文字母的时候.其中有一条红线 ...

  6. HDU 5687 Problem C 【字典树删除】

    传..传送:http://acm.hdu.edu.cn/showproblem.php?pid=5687 Problem C Time Limit: 2000/1000 MS (Java/Others ...

  7. 一个有意思的标签<marquee>

    marquee标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果,该标签是个容器标签.  一.mar ...

  8. 【luogu P2146 [NOI2015]软件包管理器】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2146 变量名真毒瘤 我真的再也不把l,left,r,right弄反了 反向思维更好做一些 #include ...

  9. 【Linux-CentOS】【转-更正】使用CentOS DVD1 和DVD2做本地yum源

    原文在此.此文写的非常好,怕网络丢失,特转来,并做了更正. CentOS6以上版本一般都会提供一个DVD1和一个DVD2镜像,使用DVD1即可安装使用CentOS了,DVD2中存放了一些额外的软件包, ...

  10. Navicat Premium 连接Oracle 数据库之配置

    Navicat Premium连接Oracle 数据库之配置 1.Oracle数据库服务器下载 Oracle官方网站下载数据库最新版本:http://www.oracle.com/technetwor ...