题目链接

描述

南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:

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

分析:

用prim算法求最小生成树,在同一个图中的最小生成树一定是唯一确定的,所以不管从那个点开始建树都是一样的,首先求起始点到其一每个点的最短距离,然后把最短距离的那个点与起始点一起构成树,然后循环找没有在树中且与树的距离最短的点。

代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
int Tu[502][502];
int dis[502];
int bj[502];
int v,e;
int prim()///普里姆算法
{
int sum=0;
for(int i=1; i<=v; i++)
{
dis[i]=Tu[1][i];///到i点的最短距离
bj[i]=0;///标记这个点有没有访问过
}
bj[1]=1;///1点访问过了
int flag=1;///下一个起始点
int cut=1;///线的个数
while(cut<v)
{
int Min=INF;
for(int i=1; i<=v; i++)
{
if(bj[i]==0&&dis[i]<Min)///找到下一个最短距离
{
Min=dis[i];
flag=i;
}
}
sum+=dis[flag];///加上这个距离
bj[flag]=1;///标记flag点访问过
cut++;///条数加
for(int i=1; i<=v; i++)
if(bj[i]==0&&dis[i]>Tu[flag][i])///这个点没有访问过并且最短距离可以更新
{
dis[i]=Tu[flag][i];
}
}
return sum; }
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&v,&e);
int a,b,c;
for(int i=1; i<=v; i++)
for(int j=1; j<=v; j++)
{
if(i==j)
Tu[i][j]==0;
else
Tu[i][j]=INF;
}
while(e--)
{
scanf("%d%d%d",&a,&b,&c);
Tu[a][b]=Tu[b][a]=min(Tu[a][b],c);///可能会存在重复输入路径的情况
}
int Min=0x3f3f3f3f;
int num;
for(int i=1; i<=v; i++)///求得最小的外接费用
{
scanf("%d",&num);
Min=min(Min,num);
}
printf("%d\n",prim()+Min);
}
return 0;
}

NYOJ 38 布线问题 (最小生成树 prim)的更多相关文章

  1. NYOJ 38布线问题

    http://acm.nyist.net/JudgeOnline/problem.php?pid=38 布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 南阳 ...

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

    时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式.该布线方式须要满足下面条件: 1.把全部的楼都供 ...

  3. nyoj 38 布线问题 Kruskal and Prim

    布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的 ...

  4. nyoj 38 布线问题

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38 最小生成树水题~ 代码: #include "stdio.h" / ...

  5. 布线问题 最小生成树 prim + kruskal

    1 : 第一种 prime     首先确定一个点 作为已经确定的集合 , 然后以这个点为中心 , 向没有被收录的点 , 找最短距离( 到已经确定的点 ) , 找一个已知长度的最小长度的 边 加到 s ...

  6. p1221网络布线(最小生成树 Prim(普里母)算法) p1222 Watering Hole

    描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助.约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路 ...

  7. NYOJ 38 布线问题_(解法1 Kruskal算法)

    时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式,该布线方式须要满足下面条件: 1.把全部的楼都供 ...

  8. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  9. 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)

    matrix.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include < ...

随机推荐

  1. java_hdfs之读写文件

    package hdfsTest.answer.hdfs; import java.io.IOException; import java.net.URI; //import java.net.URL ...

  2. 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)

    2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...

  3. 解析车辆VIN码识别(车架号识别)系统

    很多人在购买车辆的时候,只关注性能.外观.内饰等,其实真正的内行是首先看车辆的VIN码,也叫车架号码. VIN码(车架号码)是一辆车的唯一身份证明,一般在车辆的挡风玻璃处,有的在车辆防火墙上,或B柱铭 ...

  4. 第一篇 Postman的初级使用之设置环境快速切换生成环境与测试环境

    POSTMAN是有谷歌的开源工具,在开发调试.测试执行过程中使用频率非常广泛,本文将记录一些postman在测试中常见的一些配置和使用方法 一.基本的页面区域 略,很简单,大家都会看,再有,学习下面的 ...

  5. 使用CodeBlocks编译64位程序(用的编译器仅仅是windows sdk的)

    需求: -CodeBlocks使用nightly版本: -Windows SDK(我使用的是6.0A,即微软针对vista的,因为这个比较小,你也可以选择其他版本但是要有64位编译器.他也适用于xps ...

  6. [推荐]spring cloud 详解

    http://blog.csdn.net/column/details/15197.html

  7. 6.爬虫 requests库讲解 总结

    requests库的总结: 用ProcessOn根据前面的几节内容做了个思维导图:

  8. MUI scroll 定位问题

    做一个微信项目,使用MUI做框架,在使用scroll定位的时候,出现了定位不准确的问题,查询了好多资料,得知他是相对定位.折腾了好久,才搞定,现在做一个笔记. mui('body').on('tap' ...

  9. 使用gradle打包时将依赖也合并入jar包

    有些情形需要将项目依赖的jar包也合并入自己项目的jar包内,出来的这个jar我们称它为fat-jar.我所使用的方法需要用到shadow插件: 下面例子展示将mybatis打入我的jar包,并将my ...

  10. LTE QCI分类 QoS

    http://blog.163.com/gzf_lte/blog/static/20840310620130140057204/ http://blog.163.com/gzf_lte/blog/st ...