nyoj 38-布线问题(prim, sort)
38-布线问题
内存限制:64MB
时间限制:1000ms
Special Judge: No
accepted:5
submit:11
题目描述:
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算法
1、prim算法就是由任意一个点开始找最短的路径
2、在前一个的基础上我们可以得到两个点且改两个点已经连接上
3、现在我们要找的就是经过第一个或第二个点的最小路径
4、依次循环直到遍历所有的点
③、从外面连入的线我们直接根据升序排序,再取最小的值
④、两者相加即为结果 核心代码(prim模板):
int prim()
{
int cnt = , pos = , my_weight[n+], my_book[n+] = {, }; // cnt表示最小的布线情况
for(int i = ; i <= n; ++ i)
if(!my_book[i])
my_weight[i] = my_map[pos][i];
for(int i = ; i < n; ++ i)
{
int my_min = MAXNUM;
for(int j = ; j <= n; ++ j)
{
if(!my_book[j] && my_weight[j] < my_min)
{
my_min = my_weight[j];
pos = j;
}
}
cnt += my_min;
my_book[pos] = ;
for(int j = ; j <= n; ++ j)
{
if(!my_book[j] && my_weight[j] > my_map[j][pos])
my_weight[j] = my_map[j][pos];
}
}
return cnt;
}
C/C++代码实现(AC):
#include <bits/stdc++.h> using namespace std;
const int MAXN = ;
const int MAXNUM = 0x3f3f3f3f;
int my_map[MAXN][MAXN], n, m, my_line[MAXN]; int prim()
{
int cnt = , pos = , my_weight[n+], my_book[n+] = {, }; // cnt表示最小的布线情况
for(int i = ; i <= n; ++ i)
if(!my_book[i])
my_weight[i] = my_map[pos][i];
for(int i = ; i < n; ++ i)
{
int my_min = MAXNUM;
for(int j = ; j <= n; ++ j)
{
if(!my_book[j] && my_weight[j] < my_min)
{
my_min = my_weight[j];
pos = j;
}
}
cnt += my_min;
my_book[pos] = ;
for(int j = ; j <= n; ++ j)
{
if(!my_book[j] && my_weight[j] > my_map[j][pos])
my_weight[j] = my_map[j][pos];
}
}
return cnt;
} int main()
{
int t;
scanf("%d", &t);
while(t --)
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++ i)
for(int j = ; j <= n; ++ j)
my_map[i][j] = MAXNUM;
for(int i = ; i < m; ++ i)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
my_map[a][b] = my_map[b][a] = c;
} for(int i = ; i < n; ++ i)
scanf("%d", &my_line[i]);
sort(my_line, my_line + n, less<int>());
printf("%d\n", my_line[] + prim());
}
return ;
}
nyoj 38-布线问题(prim, sort)的更多相关文章
- NYOJ 38布线问题
http://acm.nyist.net/JudgeOnline/problem.php?pid=38 布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳 ...
- NYOJ 38 布线问题_(解法2 Prim算法)
时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式.该布线方式须要满足下面条件: 1.把全部的楼都供 ...
- nyoj 38 布线问题 Kruskal and Prim
布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的 ...
- NYOJ 38 布线问题 (最小生成树 prim)
题目链接 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测 ...
- NYOJ 38 布线问题_(解法1 Kruskal算法)
时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 南阳理工学院要进行用电线路改造.如今校长要求设计师设计出一种布线方式,该布线方式须要满足下面条件: 1.把全部的楼都供 ...
- nyoj 38 布线问题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38 最小生成树水题~ 代码: #include "stdio.h" / ...
- [图论]最优布线问题:prim
最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...
- 【待修改】nyoj 38 最小生成树
package nyoj; import java.util.Scanner; public class Main { public static void main(String args[]) { ...
- NYIST OJ 题目38 布线问题
最小生成树水题,先按最小生成树做,答案最后加上最小的从第i号楼接线到外界供电设施所需要的费用即可. #include<cstdio> #include<cstring> #in ...
随机推荐
- QuartzCode快速开发动画代码工具
QuartzCode快速开发动画代码工具 QuartzCode一款快速,轻量,强大的动画工具,可快速得到原生的ObjC/Siwft代码 我可以用QuartzCode做什么? 应用程序演练动画 动画菜单 ...
- e.target与事件委托简例(原生和jQuery的区别)
target定义(英译:目标,目的): target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素.文档或窗口. 语法: event.target event.target.no ...
- Python标准库---random模块的使用
更新时间:2019.09.12(更新目录) 目录 1. 谈谈随机数 2. random模块 2.1 random.seed() 2.2 random.random() 2.3 random ...
- Oracle数据库 常见的SQL题,复习
01.查询员工表所有数据,并说明使用*的缺点 select * from emp 02.查询职位(JOB)为'PRESIDENT'的员工的工资 select sal from emp where jo ...
- Handler的postDelayed(Runnable, long)
handler.postDelayed(myRunnable,1000)是为了轮播图片,每隔1000ms后执行一次run方法,实现轮播实例如下: public void MesageColse(){ ...
- SpringBoot系列之YAML配置用法
1.全局配置 SpringBoot的全局配置文件有两种: application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值,主要是 ...
- UNIX环境高级编程 使用方法
1.解压文件到apue.2e目录2.修改相应平台的文件,我使用的是linux,所以修改Make.defines.linux你修改的只需要这一行WKDIR=/home/your_dir/apue2e_s ...
- Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)
简介 经过上一次的化妆和整形,有客户提出需求能不能将那个普通会员的套餐再升级一下,再漂亮一点.所以这次咱们就来看看从哪里下刀可以使它变得再漂亮一点点. 上一篇文章修改了一些基本的ReportNG信息, ...
- C语言存储类别和链接
目录 C语言存储类别和链接 存储类别 存储期 五种存储类别 C语言存储类别和链接 最近详细的复习C语言,看到存储类别的时候总感觉一些概念模糊不清,现在认真的梳理一下.C语言的优势之一能够让程序员恰 ...
- leetcode算法小题(1)
题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...