讲解 算法训练 安慰奶牛
首先谈谈这道题的基本思路吧,题目中谈到要将P条道路尽可能的去减少,并保证个点之间是可达的,同时要求其最小时间。
很明显的去告诉我们,用最小生成树算法。
最小生成树算法有两种,
1.克鲁斯卡尔算法 2.prim算法
注意
排序用sort函数。(不要用冒泡排序)。
如果用冒泡排序。会一直显示超时的问题
sort函数(优化后的快速排序)。会根据数据量去选择用何种排序方法(快速排序,或堆排序)
很多向我一样的萌新会去使用冒泡排序,但sort函数既简洁又方便。
技巧:
因为他最后会在每个结点处休息的。所以结点的时间也会去算的。
每个边会走两次(去的时候一次,回来的时候一次,)也就是每条边所花费的时间是
(走边的权的时间*2+去的那个结点安慰奶牛的时间+回来的那个结点安慰奶牛的时间)
由于不管我们怎么走,选取哪些边,从中间走,或从两头走,平均每条边花费的时间都是
上面的
所以我们直接将 边的权=(走边的权的时间*2+去的那个结点安慰奶牛的时间+回来的那个结点安慰奶牛的时间);
最后再进行克鲁斯卡尔算法,求最小生成树的值。
最后值+最小结点,因为有个结点会多走一次(细读题意)。所以我们直接在最小的结点开始走。
(因为一定要连接所有结点),所以否定了这个结点可能走不到的问题。
如果此题
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct bian
{
int from;//起点
int to;//终点
int quan;//权值
};
int root (int a[],int x)//寻根算法
{
while(a[x]!=x)
{
x=a[x];
}
return x;
}
bool cmp(bian b1,bian b2)
{
return b1.quan<b2.quan;
}
int main ()
{
int sum=0;//记录所有的时间
int n,p;//结点数与边数
cin>>n;
cin>>p;
int a[n+1];//记录所有点的父亲(双亲表示法)
bian b[p+1];//所有边
int i;
int m[n+1];
int min=10001;
for(i=1;i<=n;i++)
{
cin>>m[i];
if(m[i]<=min)
{
min=m[i];
}
}
for(i=1;i<=p;i++)
{
cin>>b[i].from>>b[i].to>>b[i].quan;
b[i].quan=b[i].quan*2+m[b[i].to]+m[b[i].from];
}
sort(b+1,b+p+1,cmp);
for(i=1;i<=n;i++)
{
a[i]=i;//每个人都是自己的父亲
}
int j;
bian t;
int k=0;//记录kustral算法收纳的边数
int zhong1;
int zhong2;
for(i=1;i<=p;i++)
{
zhong1=root(a,b[i].from);
zhong2=root(a,b[i].to);
if(zhong1!=zhong2)
{
a[zhong1]=zhong2;
sum+=b[i].quan;
k++;
}
if(k==n-1)
{
break;
}
}
cout<<sum+min;
}
讲解 算法训练 安慰奶牛相关推荐
- 蓝桥杯 算法训练 安慰奶牛
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场 ...
- 蓝桥杯 - 算法训练 安慰奶牛 (Kruscal最小生成树+技巧)
题目描述: Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路 ...
- 算法训练 安慰奶牛(最小生成树)
这道关于最小生成树的问题,起初让我百思不得解,所以就搁置了下来,今天才想着做做,一会儿我就跟你们说说我那可笑的理解.可笑的疑惑! 题目: 问题描述 Farmer John变得非常懒,他不想再继续维护供 ...
- java实现 蓝桥杯 算法训练 安慰奶牛
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...
- 安慰奶牛 (算法训练)
算法训练 安慰奶牛 时间限制:1.0s 内存限制:256.0MB 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧 ...
- 蓝桥杯-安慰奶牛(java)
算法训练 安慰奶牛 时间限制:1.0s 内存限制:256.0MB 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为 ...
- C语言题目奶牛牧场,C语言算法训练:安慰奶牛
C语言算法训练:安慰奶牛 导语:FJ变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.下面我们来看看C语言算法训练:安慰奶牛. 每一个牧场都是一个奶 ...
- 蓝桥杯练习系统习题-算法训练1
蓝桥杯练习系统习题-算法训练1 题目搜索方式:Ctrl+F--> 输入题目名称->定位到解答. 入门训练(详见 算法-蓝桥杯习题(1-1)) 基础练习(详见 算法-蓝桥杯习题(2-1)) ...
- GitHub高赞,针对小白的算法训练仓库
在家隔离的日子也是好好学习提高的日子,今天TJ君看到了一个专门针对小白的算法训练,感觉不错,和大家一起来分享一下. 整个学习流程有四个步骤,分别是: PART_1_算法基础 PART_2_力扣图解 P ...
最新文章
- 00后的AI开发者进阶之道:从入门到鏖战MIT编程大赛 | 人物志
- Just for fun——写个爬虫抓取whois信息
- 开源项目实例源码_今年我读了四个开源项目的源码,来分享下心得
- 客户端检测的含义和方法
- python后面空格报错_python中空格和table混用报错原因
- [html] html页面中如何实现gif图片重新播放?
- C++中的数组与指针
- 监控WIN2003文件服务器上的文件夹和文件的复制、删除
- angularjs绑定属性_AngularJS隔离范围属性绑定教程
- EOSIO 指南(浏览源码)
- 长三角江浙沪有影响力的调查研究咨询公司
- 二、Win10如何解决svchost一直占用网速和内存?
- Prometheus通知模板参考
- 高德地图定位获取当前地址城市街道等详细信息(全部代码)
- ES6常见面试题(二)
- 亲身体验 北京-环球嘉年华!
- STM32寄存器ODR,BSRR和BRR
- 队列的定义、循环队列的顺序存储结构及链式存储结构
- 彻底掌握 Javascript(九)数组【讲师辅导】-曾亮-专题视频课程
- 漱口水的性别真的重要吗