`
huobengluantiao8
  • 浏览: 1077285 次
文章分类
社区版块
存档分类
最新评论

hdu_1863 畅通工程

 
阅读更多

畅通工程

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

TimeLimit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8916 Accepted Submission(s): 3454

ProblemDescription

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M (< 100 );随后的 N
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。

Output

对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

SampleInput

3 3

1 2 1

1 3 2

2 3 4

1 3

2 3 2

0 100

SampleOutput

3

?

解题思路:

这一题是一个典型的并查集案例题,这一题主要的解题思路是用刚学的并查集的示例代码来实现的。用一个findSet(int x)函数来查找x节点的根节点,返回该跟节点的下标

用一个结构体array来表示某个节点的值,值x城市到y城市之间的距离为z,输入的时候,先将输入的路线按照城市与城市之间的距离z进行排序,连接的时候将结构体array数组的值作为该下标的父节点,这样进行递归查找,当路线的条数等于城市数-1是就输出,如果到最后建立起来的数的路线总数小于路线的条数等于城市数-1,也表示不可达

代码实现:

#include <stdio.h>
#include<iostream>
#include <algorithm>
using namespace std;
int set[102];//每个节点,现在是一颗只有一个节点的树
struct array {
	int x;
	int y;
	int z;
};
int findSet(int x) {//查找x节点的根节点
	if (x == set[x]) {//返回该下标
		return x;
	} else {
		return set[x] = findSet(set[x]);
	}
}
int main() {
	int n, m;
	int count = 0;//计算总路线数量,n个节点n-1条边
	int sum = 0;//总价
	int i,j;
	array a[100];
	array temp;
	//array a[100];
	while (scanf("%d", &n)) {
		if (n != 0) {//输入不为0时
			sum = 0;
			count = 0;
			scanf("%d", &m);
			for (i = 1; i <= n; i++) {
				set[i] = i;
				scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].z); //第一个村庄a[i].x与第二个村庄a[i].y之间的距离a[i].z
			}
			for (i = 1; i <= n; i++) {
				for (j = i + 1; j <= n; j++) {//从小到大排序
					if (a[i].z > a[j].z) {
					    temp = a[i];
						a[i] = a[j];
						a[j] = temp;
					}
				}
			}
			for (i = 1; i <= n; i++) {
				int fx = findSet(a[i].x);
				int fy = findSet(a[i].y);
				if (fx==fy) {//有相同的父节点,则不用在连接了
					continue;
				} else {//连接两个节点
					set[fx] = fy ;
					count++;//路线总数
					sum += a[i].z;
				}
				if (count == m - 1) {
					break;
				}
			}
			if(count<m-1)
			{//输出不符合情况
				printf("?\n");
			}
			else//输出总和
				printf("%d\n", sum);
		} else {
			break;
		}
	}
	return 0;
}


分享到:
评论

相关推荐

    hdu_acm_1084.rar_ACM_HDU10_acm10_hdu_hdu 1084

    【标题】"hdu_acm_1084.rar_ACM_HDU10_acm10_hdu_hdu 1084" 提供的是一个关于杭电(HDU)ACM竞赛第1084题的解决方案。该题目可能是在编程竞赛中常见的算法问题,而ACM(国际大学生程序设计竞赛)是全球知名的编程...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    hdu_ACM.rar_ACM_hdu_hdu acm_hdu_ACM_杭电ACM

    杭电hdu acm资料所用杭电的acm题

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu_2102_passed

    hdu_2102_passed_sorce

    HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu.

    8. **软件工程实践**:虽然这些代码可能只是简单的实现功能,但它们也可以作为小型项目的实例,帮助学习者理解软件开发的整个生命周期,包括需求分析、设计、编码、测试和维护。 总结起来,这个压缩包是一个学习和...

    HDU_ACM培训课件(完整版)

    HDU_ACM培训课件是面向参与ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,简称ICPC)的学员准备的一套完整的教程资源。这个压缩包包含了丰富的学习资料,旨在帮助参赛者提升编程技能...

    samele123#HDU_ACM#HDU 1874 畅通工程续1

    题目链接题目意思有n个城镇,编号为0~n-1,m条道路,从一个城镇到另一个城镇有多条路,现在问你从一个城镇到另一个城镇的最短距离是多少。其中要注意的是,城镇之间

    HDU_ACM_1002_大数相加C源代码

    HDU_ACM_1002_大数相加C源代码,利用字符串处理

    杭电期中期末复习资料档案库_HDU_QuickLearner.zip

    杭电期中期末复习资料档案库_HDU_QuickLearner

    HDU_软工_计组实验1~8

    【标题】"HDU_软工_计组实验1~8"所涵盖的知识点主要集中在计算机组织(简称计组)的实践操作层面,这通常包括对计算机硬件结构、指令系统、存储器体系、数据表示以及处理器工作原理等基础知识的深入理解和应用。...

    HDU.rar_hdoj 2000 2999 chm_hdoj 2000-2099_hdu_hdu acm 20_杭电ACM

    这份名为"HDU.rar"的压缩包文件,包含了针对杭电(Hangzhou Dianzi University,简称HDU)ACM竞赛平台上的2000至2099号题目的一系列解题报告。这些报告以".chm"(Compiled Help Manual)格式存储,是专门为ACM(国际...

    模式识别_hdu_期末复习资料集合_试卷笔记.zip

    在本压缩包文件“模式识别_hdu_期末复习资料集合_试卷笔记.zip”中,我们可以期待找到与杭州电子科技大学(HDU)模式识别课程相关的期末复习资料,可能包括过去的试卷、笔记和其他学习材料。 模式识别的基本概念...

    B_(HDU_1231)(最大子段和,分治).cpp

    B_(HDU_1231)(最大子段和,分治).cpp

    Hispark中相关hi3861的相关介绍

    描述中提到的链接指向了Gitee上的一个项目仓库,该仓库包含了与Hi3861相关的资源,特别是针对杭州电子科技大学(HDU)物联网应用的开发文档。开发者可以在这里找到详细的资料,包括SDK、API参考、示例代码以及用户...

    sanguosha.rar_hdu_三国杀_标程

    【标题】"sanguosha.rar_hdu_三国杀_标程" 提供的是一个关于 HDU(杭州电子科技大学在线判题系统)3378 题目的解题报告,该题目名为“三国杀”,并且包含了一份用 C++ 编写的程序代码“san guo sha.cpp”。...

    hdu-page-11-answer.rar_hdu_hdu oj第十一页_page_搜题_杭电oj

    本资料"HDU Page 11 Answer"正是针对杭电OJ中第11页的题目,提供了一系列题解,旨在帮助初学者快速掌握基础算法,并提升编程能力。 一、ACM入门基础知识 ACM竞赛强调的是团队协作和快速解决问题的能力,其核心是...

    Rightmost Digit_hdu_

    【标题】"Rightmost Digit HDU" 这道题目来源于HDU(杭州电子科技大学)的在线判题系统,通常这类题目是编程竞赛或者算法训练的一部分。"Rightmost Digit"直译为“最右边的数字”,我们可以推测这是一个关于数字...

    code_hdu.rar_ACM_The First_hdu_test case example

    For a positive integer n, let’s denote function f(n,m) as the m-th smallest integer x that x&gt;n and gcd(x,n)=1. For example, f(5,1)=6 and f(5,5)=11. You are given the value of m and (f(n,m)?...

    数字图像处理_hdu_期末复习资料_试卷等.zip

    这个压缩包“数字图像处理_hdu_期末复习资料_试卷等.zip”显然是为杭州电子科技大学(HDU)的学生准备的期末复习材料,包含了一些关于这门课程的试卷。下面,我们将详细探讨数字图像处理的一些核心知识点。 1. 图像...

Global site tag (gtag.js) - Google Analytics