NYOJ 38 布线问题_(解法1 Kruskal算法)
- 描写叙述
- 南阳理工学院要进行用电线路改造。如今校长要求设计师设计出一种布线方式,该布线方式须要满足下面条件:
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> 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<v-1)
{
x=father[node[i].v1-1];
y=father[node[i].v2-1];
if (x!=y)
{
for(k=0;k<v;k++)
if(father[k]==y)
father[k]=x;
s+=node[i].cost;
++j;
}
++i;
}
} int main()
{
int n;
int i;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&v,&e);
ArcNode *node=new ArcNode[e];
for(i=0;i<e;i++)
scanf("%d%d%d",&node[i].v1,&node[i].v2,&node[i].cost); sort(node,node+e,cmp); for(i=0;i<v;i++)
{
scanf("%d",&add[i]);
father[i]=i;
} sort(add,add+v); Kruskal(node); //运用克鲁斯卡尔算法求出cost值最小的连通图 printf("%d\n",s+add[0]);
delete[] node;
node=NULL;
}
return 0;
}
NYOJ 38 布线问题_(解法1 Kruskal算法)的更多相关文章
- NYOJ 38 布线问题_(解法2 Prim算法)
时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式.该布线方式须要满足下面条件: 1.把全部的楼都供 ...
- NYOJ 38布线问题
http://acm.nyist.net/JudgeOnline/problem.php?pid=38 布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳 ...
- nyoj 38 布线问题 Kruskal and Prim
布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的 ...
- nyoj 38 布线问题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38 最小生成树水题~ 代码: #include "stdio.h" / ...
- NYOJ 38 布线问题 (最小生成树 prim)
题目链接 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测 ...
- kruskal算法求最小生成树(jungle roads的kruskal解法)
注意: 注意数组越界问题(提交出现runtimeError代表数组越界) 刚开始提交的时候,边集中边的数目和点集中点的数目用的同一个宏定义,但是宏定义是按照点的最大数定义的,所以提交的时候出现了数组越 ...
- 学习笔记之 prim算法和kruskal算法
~. 最近数据结构课讲到了prim算法,然而一直使用kruskal算法的我还不知prim的思想,实在是寝食难安,于此灯火通明之时写此随笔,以祭奠我睡过去的数 据结构课. 一,最小生成树之prim pr ...
- 经典算法题每日演练——第十六题 Kruskal算法
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...
- 最小生成数之Kruskal算法
描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了--但是幸运的是,经过计算机的分析,小Hi已经筛选出了一些比较适合建造道路的路线,这个数量并没有特别的大. 所以问题变成 ...
随机推荐
- iOS学习笔记01-APP相关
AppDelegate对象方法 # 程序第一次启动后才会执行 - (BOOL)application:(UIApplication *)application didFinishLaunchingWi ...
- 用js判断浏览器类型及设备
<!DOCTYPE html> <html> <head> <title>JS判断是什么设备是什么浏览器</title> <meta ...
- Django notes I: collection of links to the Django document
Links to the Django documents: the Django template language automatically generated context variable ...
- 刷题总结——树有几多愁(51nod1673 虚树+状压dp+贪心)
题目: lyk有一棵树,它想给这棵树重标号. 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号. 这棵树的烦恼值为所有叶子节点的值的乘积. lyk想让这棵树的烦恼值最大,你只需输 ...
- 【python接口自动化】获取根目录
将该方法放在根目录下面,在其他类中直接import 该方法. import os def getRootPath(): rootPath = os.path.dirname(os.path.abspa ...
- How to fix the gray screen bug in VirtualBox
If you see a gray screen instead of GNOME when entering the system, simply switch to a virtual conso ...
- 用python生成二维码
Python生成二维码,可以使用qrcode模块, github地址 我是搬运工 首先安装, 因为打算生成好再展示出来,所以用到Pillow模块 pip install qrcode pip inst ...
- hdu 2841(容斥原理+状态压缩)
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Codeforces Gym101502 B.Linear Algebra Test-STL(map)
B. Linear Algebra Test time limit per test 3.0 s memory limit per test 256 MB input standard input ...
- 计蒜客 微软大楼设计方案(RMQ)
题目链接 微软大楼设计方案 中文题就不说题意了~ 首先是简单版本 满足$1 <= n, m <= 50$ 那么设$c[i][j]$为从第$i$幢楼到第$j$幢楼的最低的那幢楼的高度 计算两 ...