时间限制: 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開始),因为安全问题,仅仅能选择一个楼连接到外界供电设备。 数据保证至少存在一种方案满足要求。 输出 - 每组測试数据输出一个正整数,表示铺设满足校长要求的线路的最小花费。 例子输入
-
14 61 2 102 3 103 1 101 4 12 4 13 4 11 3 5 6
例子输出 -
4
- 第一行是一个整数n表示有n组測试数据。
代码例如以下
#include#include #include #include using namespace std;const int MAXN = 505 ;struct ArcNode{ int v1,v2; //v1、v2表示可连通的楼 int cost; //cost表示连通v1、v2的花费};int father[MAXN],add[MAXN];int v,e,s;bool cmp(const ArcNode &lhs, const ArcNode &rhs){ return lhs.cost < rhs.cost;}void Kruskal(ArcNode *node){ int i,j,k,x,y; i=j=0; s=0; while(j