NYOJ-38 布线问题(图论,最小生成树,Prime)

关于图的常用算法——Dijkstra单源最短路径、Floyd多源最短路径、Prim和Kruskal最小生成树算法 Dijkstra最短路径算法是计算某一点到其它点的最短距离的算法。 Floyd算法是用来计算图中所有点之间的最短距离,可参考:http://developer.51cto.com/art/201403/433874.htm 最小生成树(Minimium Spanning Tree) 如果要在N个城市中铺设网络,每个城市之间的网络建设成本不同,如何找到一个建设方案,使得 阅读详情

布线问题

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 4
描述
南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:
1、把所有的楼都供上电。
2、所用电线花费最少
输入
第一行是一个整数n表示有n组测试数据。(n<5)
每组测试数据的第一行是两个整数v,e.
v表示学校里楼的总个数(v<=500)
随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100)。(哪两栋楼间如果没有指明花费,则表示这两栋楼直接连通需要费用太大或者不可能连通)
随后的1行里,有v个整数,其中第i个数表示从第i号楼接线到外界供电设施所需要的费用。( 0<e<v*(v-1)/2 )
(楼的编号从1开始),由于安全问题,只能选择一个楼连接到外界供电设备。
数据保证至少存在一种方案满足要求。
输出
每组测试数据输出一个正整数,表示铺设满足校长要求的线路的最小花费。
样例输入
1
4 6
1 2 10
2 3 10
3 1 10
1 4 1
2 4 1
3 4 1
1 3 5 6
样例输出
4
来源
[张云聪]原创
上传者
张云聪

思路:
        图论问题, 使用邻接矩阵+最小生成树(Prime算法);

代码:

#include <stdio.h>
#include <string.h>

#define N 510
#define INF 500000000

int map[N][N], low[N];		//low表示i的所有连边的最小权值
bool bz[N];					//bz表示标记数组
int v, e;					//v表示楼个数, e表示关系数

int prim();					//返回最小生成数的权值

int main()
{
	int n, i;
	scanf("%d", &n);
	while(n--){
		memset(map, -1, sizeof(map));
		memset(bz, 0, sizeof(bz));
		memset(low, -1, sizeof(low));

		scanf("%d%d", &v, &e);
		int x, y, z;
		for(i = 0; i < e; i ++){				//建图
			scanf("%d%d%d", &x, &y, &z);
			map[x][y] = map[y][x] = z;
		}
		int t, money = INF;
		for(i = 1; i <= v; i ++){
			scanf("%d", &t);					//从变电站到教学楼
			if(t < money) money = t;			//直接选最小
		}
		money += prim();
		printf("%d\n", money);
	}

	return 0;
}

int prim()
{
	int i, j, ans = 0, choose;						//ans是总值, choose是当前选择的节点编号
	for(i = 1; i <= v; i ++) low[i] = map[1][i];	//默认从1开始,建立low表
	low[1] = 0;
	bz[1] = 1;
	for(i = 1; i < v; i ++){
		int min = INF;
		for(j = 1; j <= v; j ++){
			if(!bz[j] && low[j] != -1 && low[j] < min){
				min = low[j];			//寻找该节点所有连边中权值最小的一个
				choose = j;				//记录该边的终点
			}
		}
		ans += low[choose];				//记入总数
		bz[choose] = 1;					//标记走过
		for(j = 1; j <= v; j ++){		//遍历起点为choose的所有连边,并更新low表
			if(!bz[j] && map[choose][j] != -1 && (map[choose][j] < low[j] ||  low[j] == -1))
				low[j] = map[choose][j];		//更新low表
		}
	}

	return ans;
}



最大权二分匹配—KM算法入门 && 模板 最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大。解决这个问题可以用KM算法。理解KM算法需要首先理解“可行顶标”的概念。可行顶标是指关于二分图两边的每个点的一个值lx[i]或ly[j],保证对于每条边w[i][j]都有lx[i]+ly[j]-w[i][j]>=0。如果所有满足lx[i]+ly[j]==w[i][j]的边组成的导出子图中存在一个完美匹配,那么这个 阅读详情

相关推荐

全网最详细 解决戴维南定理的详细推导

替代定理,戴维南定理详细证明

m0_52555753的博客 3万+

java 图 代码自己写

图的建立也是基于数组的,但是遍历的话是基于链表或者是矩阵的     在计算机程序中,图是最常用的结构之一。 一般来说,用图来帮助解决的问题类型与其他的数据结构有很大的差别。 如果处理一般的数据存储问题,可以用不到图,但是对一些特别的问题,用图来解决是必不可少的。      对图的讨论有两种,一种是带权的,还有一种是不带权的。        不带权的图        图是一种与树...

Hi, Sun 365

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

布线问题(迷宫问题)

<br />      布线问题和迷宫问题是同一类题,我想大家对于题目应该很了解了吧。好吧,我用分支限界法做的,再加上C++ STL的辅助,其实还不<br />错。布线问题时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte<br />总提交:0            测试通过:0<br /><br />描述<br />           <br /> <br />   假设要将一组元件安装在一块线路板上,为此需要设计一个线路板布线方案。各元件的连

zhuxin 3829

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 281

STM32串口调试踩坑记:HAL_UART_ErrorCallback里不先解锁,你的中断接收就废了

本文深入分析了STM32串口调试中HAL_UART_ErrorCallback的锁机制陷阱,指出在错误回调中不先解锁会导致中断接收失效的问题。通过解析HAL库源码,提出了正确的错误处理实现方法,并分享了预防措施与最佳实践,帮助开发者提升串口通信的可靠性。

weixin_33733810的博客 513

poj3608Bridge Across Islands(凸包间最小距离)

链接 以下所有文章均转载(http://blog.youkuaiyun.com/acmaker/article/details/3176910) 转载请注明出处! 考虑如下的算法, 算法的输入是两个分别有 m 和 n 个顺时针给定顶点的凸多边形 P 和 Q。 计算P上y坐标值最小的顶点(称为yminP) 和Q上y坐标值最大的顶点(称为ymaxQ)。 为多边形在yminP...

weixin_30451709的博客 119

【图文步骤】EC-Engineer部分操作详细步骤

EC-Engineer部分功能详细使用手册

weixin_42212468的博客 6171

最小生成树

在一个具有几个顶点的连通图G中,如果存在子图G'包含G中所有顶点和一部分边,且不形成回路,则称G'为图G的生成树,代价最小生成树则称为最小生成树。 最小生成树的特点: (1)MST性质  最小生成树性质:设G=(V,E)是一个连通网络,U是顶点集V的一个真子集。若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权值,则一定存

许增强 1036

淘系商品的成长密码:历史与趋势透视

本文分析了淘系商品的发展历程,从早期的市场探索到如今的行业领先地位,深入探讨了技术创新、供应链优化、用户需求洞察等关键因素在淘系商品成功中的作用。通过对平台不断完善商品生态、提升购物体验和服务的过程分析,文章总结了淘系商品在竞争激烈的市场中如何通过创新应对挑战并推动电商行业的进步。未来,随着消费趋势变化和新兴模式的兴起,淘系商品将在更大范围内发挥其市场影响力。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

量子化学仿真软件:VASP_(9).磁性材料计算

在量子化学仿真软件 VASP 中,磁性材料的计算是一个复杂但重要的过程。通过正确设置磁性状态、分析磁性性质、优化计算参数以及研究磁性相变和磁动力学,可以更准确地描述和预测磁性材料的性能。希望本节的内容能够为研究磁性材料的科研人员提供有用的参考和指导。

kkchenjj的博客 1375

初学Kruskal——Prime

刚学了最小生成树,,,,做了这个题:NYOJ 布线问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=38 布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的

hahaAll的博客 435

华为OD机试 - 音乐小说内容重复识别 - 并查集(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 159

nyoj 38 布线问题

http://acm.nyist.net/JudgeOnline/problem.php?pid=38 第一道最小生成树,prime算法 #include #include #define MAX 1<<28 int map[505][505]; int e,v; int prime() { bool flag[505]; int path[505],i,j,sum=

ZoneFv 1118

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

nyoj--38--布线问题

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的楼都供上电。 2、所用电线花费最少 输入第一行是一个整数n表示有n组测试数据。(n 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v 随后

粥同学的学习笔记 656

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

nyoj 38 布线问题 【最小生成树】

布线问题 时间限制:1000 ms  |           内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的楼都供上电。 2、所用电线花费最少 输入第一行是一个整数n表示有n组测试数据。(n 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v

世界很大 585

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NYOJ38-布线问题

  布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的楼都供上电。 2、所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据。(n&lt;5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v&lt;=500)...

专注于全栈开发领域 368

NYOJ 布线问题(prime 算法基础)

http://59.69.128.200/JudgeOnline/problem.php?pid=38 #include #include #include #include using namespace std; const int MAX=999999; int n

左手程序,右手写诗… 1041

QDUOJ-16 分糖果(图论, 广搜)

Problem 16: 分糖果 Time Limit:1 Ms| Memory Limit:128 KB Difficulty:1 Description 童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由

狂飙的蜗牛 的专栏 3550

hduoj-1874 畅通工程续(Dijistra + Floyd + Bellman_Ford + SPFA)

图论模板题,Dijistra + Floyd + Bellman_Ford + SPFA代码.

狂飙的蜗牛 的专栏 1689

NYOJ-42 一笔画问题(图论,深搜)

一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入第一行只有一个正整数N(N 每组测试数据的第一行有两个正整数P,Q(P 随后的Q行,每行有

狂飙的蜗牛 的专栏 1569

nyoj-239 月老的难题 (二分图匹配—匈牙利算法 && 网络流—Dinic算法)

月老的难题 二分图匹配-匈牙利算法,网络流-Dinic算法,模板题 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘。 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭。 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福

狂飙的蜗牛 的专栏 1545

POJ-2195 Going Home (最小费用最大流初学 && 最大权二分匹配—KM算法)

Going Home 最小费用最大流 && 最大权二分匹配,两种解法 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16870   Accepted: 8636 Description On a grid map there are n little men and n houses. In each unit

狂飙的蜗牛 的专栏 1435

特殊“邻接表”建图方法

(此文借鉴 dollarzhaole 的 《邻接表建图方法及代码》 ) 说明:         建立无向图;         第一行输入n 表示边数; 输入示例:  5  3 4 6  3 7 8  1 3 6  2 4 7  3 5 1 图示例:                 方法:         利用数组和结构体模拟边与边的关系, 极大的节省空间和时

狂飙的蜗牛 的专栏 1265

hduoj-1233 还是畅通工程(Prim + Kruskal)

最小生成树Prim,Kruskal模版题.

狂飙的蜗牛 的专栏 1064
上一篇: 特殊“邻接表”建图方法
下一篇: KMP算法
tbl00c
博客等级 码龄13年 21粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值