当前位置: 首页 > news >正文

HDU1863(最小生成树)

题目

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

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

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

Sample Input

  
3 3 1 2 1 1 3 2 2 3 4 1 3 2 3 2 0 100
 

Sample Output

  
3 ?

分析:顶点较多,边较少的稀疏图用Kruskal算法。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int pre[5000];
struct Edge
{
	int u, v, w;
}edge[5000];
bool cmp(Edge a, Edge b)
{
	return a.w < b.w;
}
int find(int x)
{
	if (pre[x] == x)
		return x;
	else
		return pre[x] = find(pre[x]);
}
int main()
{
	int n, m;
	while (scanf("%d %d", &n, &m) != EOF)
	{
		if (n == 0)
			break;
		for (int i = 1; i <= m; i++)
			pre[i] = i;
		int sum = 0,num=0;
		for (int i = 0; i < n; i++)
			scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w);
		sort(edge, edge + n, cmp);
		for (int i = 0; i < n; i++)
		{
			if (find(edge[i].u) != find(edge[i].v))
			{
				sum += edge[i].w;
				pre[find(edge[i].v)] = find(edge[i].u);
				num++;
			}
		} 
		if (num == m - 1)
			printf("%d\n", sum);
		else
			printf("?\n");
	}
	return 0;
}

转载于:https://www.cnblogs.com/nickqiao/p/7583382.html

相关文章:

  • C++ 类的多态五(多态的语法本质分析)
  • C++ 抽象类一(多继承与赋值兼容性原则)
  • Mysql 备份与恢复
  • php 审核管理
  • 《Android深度探索》第八章心得体会
  • redis集群部署配置
  • 在互联网时代,你是消费者还是创造者?
  • 面向对象之设计模式大全
  • 关于win10配置MAVEN问题
  • php进阶整理
  • Bootstrap速学教程之简要介绍
  • CentOS如何查看端口是被哪个应用/进程占用
  • MFT的0x10标准属性数据结构
  • 一个简单的AXIS远程调用Web Service示例
  • 用五种以上的方式调试php
  • __proto__ 和 prototype的关系
  • “大数据应用场景”之隔壁老王(连载四)
  • hadoop集群管理系统搭建规划说明
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 基本功--面试宝典
  • PHP 7 修改了什么呢 -- 2
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 闭包--闭包之tab栏切换(四)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 将回调地狱按在地上摩擦的Promise
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 大数据全解:定义、价值及挑战
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​香农与信息论三大定律
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • (9)目标检测_SSD的原理
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)Linux——Linux常用指令
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (循环依赖问题)学习spring的第九天
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Sublime Text3配置Lua运行环境
  • (转)大型网站架构演变和知识体系
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net反编译工具
  • .NET企业级应用架构设计系列之技术选型
  • .NET项目中存在多个web.config文件时的加载顺序
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /etc/fstab 只读无法修改的解决办法
  • @RestControllerAdvice异常统一处理类失效原因
  • @SpringBootApplication 包含的三个注解及其含义
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [C++]类和对象【上篇】
  • [C++基础]-入门知识
  • [Flexbox] Using order to rearrange flexbox children