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 ...
随机推荐
- javascript input只输入数字和字母
<input type="text" placeholder="请输入您的用户名..."> <script type="text/j ...
- Github 上热门的 Spring Boot 项目实战推荐
最近经常被读者问到有没有 Spring Boot 实战项目可以学习,于是,我就去 Github 上找了 10 个我觉得还不错的实战项目.对于这些实战项目,有部分是比较适合 Spring Boot 刚入 ...
- {每日一题}:四种方法实现打印feibo斐波那契数列
刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列 方法一:使用普通函数 def feibo(n): """ 打印斐波那契 ...
- myeclipse 在web-inf/lib中导入包
今天用myeclipse的时候发现无法在web-inf/lib导入包,如果直接在工程上导入,则进入了一个referenced libraries的文件夹里,而web-inf/lib里面是没有jar包的 ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- openresty性能测试报告分析
一.openresty介绍 1.什么是openresty 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员 ...
- Kubernetes入门学习--在Ubuntu16.0.4安装配置Minikube
目 录 一. 安装minikube环境 1.1. 安装前准备 1.2. 安装Lantern 1.2.1. Lantern下载网站 1.2.2. Lantern下载地址 1.2.3. Lantern安装 ...
- Xbim.GLTF源码解析(一):简介
原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10838972.html 简介 Xbim.GLTF是将IFC文件转换成GLTF文件的一个 ...
- WebApp 滚动列表的实现
实现效果: 实现技术:overflow,flex,element::-webkit-scrollbar 实现步骤: //html:代码<div id="slider"> ...
- 本地客户端(自己的电脑)连接远程Oracle数据库(服务器端),客户端安装步骤
如果本地自己的电脑没有安装Oracle(服务器端数据库),那就要单独安装HA-Instant Client-v11.2.0.3.0.exe(oracle_client客户端) 如果本地安装了Oracl ...