题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1233

并查集的运用, 实质就是求最小生成树。先对所有的村庄距离从小到大排序,然后判断村庄之间是否属于同一集合,不是则将距离相加。属于同一集合,说明村庄连成了环,就不符合树的定义了。这样扫描下来,就求得最小生成树了。

要特别注意的是,数组越界问题。这个得益于Dwylkz的指点。由于村庄最多假设为100,为了防止边数越界,数组应该开到100 * 100 (10000)左右。

 #include <iostream>
#include <algorithm>
using namespace std; const int maxn = + ; // 100个村庄边数最多为10000
struct sets
{
int v1, v2; // v1,v2分别表示村庄1和村庄2
int value; // 保存两村庄间的距离
} test[maxn]; int set[maxn]; // 保存集合中的代表 int cmp(sets a, sets b)
{
return a.value < b.value;
} int find(int x)
{
return x == set[x] ? x : find(set[x]);
} int main()
{
int a, b, i, n, cnt;
while (scanf("%d", &n) != EOF && n)
{
for (i = ; i <= n; i++)
{
set[i] = i; // 初始化为n个不相交的集合
}
int len = n * (n-) / ; // 输入的行数
for (i = ; i < len; i++)
{
scanf("%d%d%d", &test[i].v1, &test[i].v2, &test[i].value);
}
sort(test, test+len, cmp); // 对距离从小到大排序
for (cnt = i = ; i < len; i++)
{
a = find(test[i].v1);
b = find(test[i].v2);
if (a != b) // 不属于同一集合,则将距离相加,这个已保证能得到最小生成树
{
set[a] = b;
cnt += test[i].value;
}
}
printf("%d\n", cnt);
}
return ;
}

hdu 1233 还是畅通工程 解题报告的更多相关文章

  1. hdu 1879 继续畅通工程 解题报告

    题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的. 0 表示没有连通: ...

  2. HDU.1233 还是畅通工程(Prim)

    HDU.1233 还是畅通工程(Prim) 题意分析 首先给出n,代表村庄的个数 然后出n*(n-1)/2个信息,每个信息包括村庄的起点,终点,距离, 要求求出最小生成树的权值之和. 注意村庄的编号从 ...

  3. 【九度OJ】题目1028:继续畅通工程 解题报告

    [九度OJ]题目1028:继续畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1028 题目描述: 省政府" ...

  4. 【九度OJ】题目1024:畅通工程 解题报告

    [九度OJ]题目1024:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅 ...

  5. 【九度OJ】题目1017:还是畅通工程 解题报告

    [九度OJ]题目1017:还是畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1017 题目描述: 某省调查乡村交通 ...

  6. 【九度OJ】题目1012:畅通工程 解题报告

    [九度OJ]题目1012:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1012 题目描述: 某省调查城镇交通状况 ...

  7. HDU 1233 还是畅通工程(Kruskal算法)

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

  8. hdu 1233 还是畅通工程 (最小生成树)

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

  9. 题解报告:hdu 1233 还是畅通工程

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

随机推荐

  1. GitHub 优秀的 Android 开源项目

    转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...

  2. Codevs1299 切水果

    题目描述 Description 简单的说,一共N个水果排成一排,切M次,每次切[L,R]区间的所有水果(可能有的水果被重复切),每切完一次输出剩下水果数量 数据已重新装配,不会出现OLE错误 时限和 ...

  3. windows上使用image库

    首先要安装这个库,可以使用pip安装,那么我们要首先安装pip 去https://bootstrap.pypa.io/get-pip.py下载get-pip.py,然后运行python get-pip ...

  4. jboss7 添加虚拟目录 上传文件路径

    直接在jboss-as-7.1.1.Final\welcome-content\下加个子目录: jboss-as-7.1.1.Final\welcome-content\logs. 即可访问.

  5. pthread_cancel

    #include <pthread.h> #include <stdio.h> #include<stdlib.h> #include <unistd.h&g ...

  6. C语言转换大小写

    #include <stdio.h> #include <ctype.h> // Contains the tolower prototype void main (void) ...

  7. mono 3.4.0 make install的时候出现"找不到 Microsoft.Portable.Common.targets 文件”的错误提示解决方法

    如果在这时就进行配置安装Mono的话,会在make阶段得到一个“找不到 Microsoft.Portable.Common.targets 文件”的错误提示, 所以需要先进行如下处理: #> c ...

  8. TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

    /** * * @author ocq */ class Parent implements Comparable { private int age = 0; public Parent(int a ...

  9. 电子技术中的dB

    (所有内容来自网络: http://www.mscbsc.com/askpro/question13066) dB是功率增益的单位,表示一个相对值 分贝是用来表示 "功率"的数量对 ...

  10. PHP正则表达式基础入门

    思维导图 介绍 正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如JavaScript.Java..Net.PHP 等,我今天就把我对正则表达式的理解跟大家唠唠,不当之 ...