nyoj--38--布线问题(克鲁斯卡尔)
布线问题
- 描述
- 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:
 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 
- 来源
- [张云聪]原创
 
e的范围一定要看到,刚开始没看到re好几次
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX 50000
int pre[MAX],a[MAX];
struct node
{
int u,v;
int val;
}edge[1000050];
int cmp(node s1,node s2)
{
return s1.val<s2.val;
}
int find(int x)
{
pre[x]==x?x:pre[x]=find(pre[x]);
}
bool join(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
pre[fx]=fy;
return true;
}
else return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int v,e;
scanf("%d%d",&v,&e);
for(int i=0;i<=v;i++)
pre[i]=i;
for(int i=0;i<e;i++)
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].val); for(int i=0;i<v;i++)
scanf("%d",&a[i]);
sort(edge,edge+e,cmp);
int sum=0;
for(int i=0;i<e;i++)
{
if(join(edge[i].u,edge[i].v))
sum+=edge[i].val;
}
sort(a,a+v);
sum+=a[0];
printf("%d\n",sum);
}
return 0;
}
nyoj--38--布线问题(克鲁斯卡尔)的更多相关文章
- nyoj 38 布线问题 Kruskal and  Prim
		布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的 ... 
- NYOJ 38 布线问题_(解法1 Kruskal算法)
		时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式,该布线方式须要满足下面条件: 1.把全部的楼都供 ... 
- NYOJ 38布线问题
		http://acm.nyist.net/JudgeOnline/problem.php?pid=38 布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳 ... 
- nyoj 38 布线问题
		题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38 最小生成树水题~ 代码: #include "stdio.h" / ... 
- NYOJ 38 布线问题_(解法2 Prim算法)
		时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式.该布线方式须要满足下面条件: 1.把全部的楼都供 ... 
- NYOJ    38   布线问题    (最小生成树   prim)
		题目链接 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测 ... 
- 图解最小生成树 - 克鲁斯卡尔(Kruskal)算法
		我们在前面讲过的<克里姆算法>是以某个顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树的.同样的思路,我们也可以直接就以边为目标去构建,因为权值为边上,直接找最小权值的边来构建生成树 ... 
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
		图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ... 
- 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
		克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ... 
- Eddy's picture(prime+克鲁斯卡尔)
		Eddy's picture Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tota ... 
随机推荐
- C指针思考-(1)
			首先记录下时间吧,@2016-08-18 23:26:22,这段时间看了同事的3本经典的书,<c缺陷和陷阱>,<c和指针>和<c专家编程>,感觉指针说的最多,多多少 ... 
- sort排序到底怎么排序
			sort()方法 sort() 方法在适当的位置对数组的元素进行排序,并返回数组. <!DOCTYPE html> <html> <head> <meta c ... 
- mysql关联更新表
			UPDATE ecm_store s LEFT JOIN (SELECT store_id, COUNT(goods_id) AS goods_count FROM ecm_goods GROUP B ... 
- mysql-面试题目1
			一.数据库的ACID 原子性(Atomicity):保证事务中的所有操作全部执行或全部不执行. 一致性(Consistency):保证数据库始终保持数据的一致性——事务操作之前和之后都是一致的. 隔离 ... 
- Android触碰事件
			OnTouchListener使用 public class ViewActivity extends Activity implements View.OnTouchListener { @Over ... 
- [ACM] HDU 1400 Mondriaan's Dream (状态压缩,长2宽1长方形铺满)
			Mondriaan's Dream Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ... 
- 配置ssh免密码登录的原理
- java9新特性-12-集合工厂方法:快速创建只读集合
			1.官方Feature 269: Convenience Factory Methods for Collections 2.产生背景 要创建一个只读.不可改变的集合,必须构造和分配它,然后添加元素, ... 
- Android开发日志统一管理
			在开发中,我们通常要对日志的输出做统一管理,下面就为大家推荐一个日志输出类,在开发阶段只需将DEBUG常量设为true,生产环境将DEBUG设为false即可控制日志的输出.啥都不说了,需要的朋友直接 ... 
- Android控件postDelayed用法,View自带的定时器
			有一个需求是这样的,点击加关注按钮后,执行关注操作,成功后按钮文字变为“已关注”,保持3秒,三秒后按钮文字便问“取消关注”,点击后执行取消关注的操作 源码: public boolean postDe ... 
