NYOJ 38 布线问题_(解法2 Prim算法)

NYOJ 38 布线问题_(解法2 Prim算法)

大家好,又见面了,我是全栈君。

时间限制:
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

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <limits.h>
#include <malloc.h>

using namespace std;

int sum;

void Prim(int **node, int v)
{
	sum=0;
	int i,j,k,min;
	int *minCost=(int *)malloc(sizeof(int)*v);

	minCost[0]=0;

	for(i=1;i<v;i++)
		minCost[i]=node[0][i];

	for(i=1;i<v;i++)
	{
		min=INT_MAX;
		for(j=1,k=1;j<v;j++)
		{
			if(minCost[j] && minCost[j]<min)
			{
				min=minCost[j];
				k=j;
			}
		}

		sum+=minCost[k];
		minCost[k]=0;

		for(j=1;j<v;j++)
		{
			if(minCost[j] && minCost[j]>node[k][j])
			{
				minCost[j]=node[k][j];
			}
		}
	}
}

int main()
{
	int n,v,e,i,j,k,l;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&v,&e);

		int **node=(int **)malloc(sizeof(int*)*v); 

		for(i=0;i<v;i++)
			node[i]=(int *)malloc(sizeof(int)*v);

		for(i=0;i<v;i++)
			for(j=0; j<v; j++)
				node[i][j]=INT_MAX;


		for(l=0;l<e;l++)
		{
			scanf("%d%d%d",&i,&j,&k);
			node[i-1][j-1]=node[j-1][i-1]=k;
		}

		Prim(node, v);

		int *av=(int *)malloc(sizeof(int)*v);

		for(i=0;i<v;i++)
			scanf("%d",&av[i]);
		sort(av,av+v);

		printf("%d\n",sum+av[0]);

	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115567.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql文件导入sqlserver_mysql导入sql文件命令

    mysql文件导入sqlserver_mysql导入sql文件命令问题来源有的时候,在使用MySQL数据库建表时,可能不需要直接在mysql数据库中建表,而需要导入外部已有的数据库表文件,方便我们使用。那么导入的方法呢?这里介绍一个很普遍也很简单的方法,步骤如下:导入步骤打开MySQL数据库,黑窗界面,如图:这里输入密码‘root’,回车。。。先确定你要建立的数据库名字,比如这里我新建数据库名字叫“house-01”,如下图。(说明:如果sql文件的内容中有创建数据库的语句,或者想将表存放在已有的数据库,在这里就不需要再创建数据库。即直接使用已经

    2022年10月2日
    2
  • java oracle 连接池_oracle数据库连接池配置

    java oracle 连接池_oracle数据库连接池配置频繁的创建和销毁数据库连接即消耗系统资源又使得程序效率低下,在这种情况下,出现了使用数据库连接池的方法,类似于线程池,初期创建一定数量的连接供应用程序使用,当使用完成后将其归还给连接池而不是销毁,这样有效的提高了资源利用率,下面分享一种简单的创建连接池的方法:1.首先,我们新建一个maven工程,并且导入ojdbc,dbcp,junit三个包待用2.然后,我…

    2022年9月2日
    5
  • 阿里Java高级工程师面试题(含答案)

    阿里Java高级工程师面试题(含答案)1,java堆,分新生代老年代,新生代有Eden,fromsurviver,tosurviver三个空间,堆被所有线程共。eden内存不足时,发生一次minorGC,会把fromsurvivor和eden的对象复制到tosurvivor,这次的to&amp;amp;amp;nbsp;survivor就变成了下次的fromsurvivor,经过多次minorGC,默认15次,达到次数的对象会从survivor…

    2022年5月2日
    48
  • Linux学习—新建文件,查看文件,修改权限,删除

    Linux学习—新建文件,查看文件,修改权限,删除过程:在一个文件夹下面新建一个文件,然后查看文件,再修改权限,运行,最后删除1、新建文件touchTest.sh补充:新建文件有好多种方式,一般用mkdir(创建目录,即文件夹)。touch

    2022年8月4日
    8
  • 锂电池管理芯片_锂电池充放电一体芯片

    锂电池管理芯片_锂电池充放电一体芯片‍FS4001‍4.2/4.354.25-10线性降压充电。FS406‍28.4/8.7/8.8/12.6/13.25开关升压充电。FS40‍08A4.2/8.4/12.69-23开关降压充电。FS406‍38.45-9自适应自适应5V升压和9V降压充电。FS40564.2/4.354.25-6.5线性降压充电。FS40674.2/4.354.25-24线性降压充电。FS40664.2/4.354.25-24线性降压充电。…

    2022年9月27日
    2
  • hdu 4870 Rating

    hdu 4870 Rating

    2022年1月12日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号