首先谈谈这道题的基本思路吧,题目中谈到要将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. 蓝桥杯 算法训练 安慰奶牛

    资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场 ...

  2. 蓝桥杯 - 算法训练 安慰奶牛 (Kruscal最小生成树+技巧)

    题目描述: Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路 ...

  3. 算法训练 安慰奶牛(最小生成树)

    这道关于最小生成树的问题,起初让我百思不得解,所以就搁置了下来,今天才想着做做,一会儿我就跟你们说说我那可笑的理解.可笑的疑惑! 题目: 问题描述 Farmer John变得非常懒,他不想再继续维护供 ...

  4. java实现 蓝桥杯 算法训练 安慰奶牛

    问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...

  5. 安慰奶牛 (算法训练)

    算法训练 安慰奶牛   时间限制:1.0s   内存限制:256.0MB        问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧 ...

  6. 蓝桥杯-安慰奶牛(java)

    算法训练 安慰奶牛   时间限制:1.0s   内存限制:256.0MB 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为 ...

  7. C语言题目奶牛牧场,C语言算法训练:安慰奶牛

    C语言算法训练:安慰奶牛 导语:FJ变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.下面我们来看看C语言算法训练:安慰奶牛. 每一个牧场都是一个奶 ...

  8. 蓝桥杯练习系统习题-算法训练1

    蓝桥杯练习系统习题-算法训练1 题目搜索方式:Ctrl+F--> 输入题目名称->定位到解答. 入门训练(详见 算法-蓝桥杯习题(1-1)) 基础练习(详见 算法-蓝桥杯习题(2-1)) ...

  9. GitHub高赞,针对小白的算法训练仓库

    在家隔离的日子也是好好学习提高的日子,今天TJ君看到了一个专门针对小白的算法训练,感觉不错,和大家一起来分享一下. 整个学习流程有四个步骤,分别是: PART_1_算法基础 PART_2_力扣图解 P ...

最新文章

  1. 00后的AI开发者进阶之道:从入门到鏖战MIT编程大赛 | 人物志
  2. Just for fun——写个爬虫抓取whois信息
  3. 开源项目实例源码_今年我读了四个开源项目的源码,来分享下心得
  4. 客户端检测的含义和方法
  5. python后面空格报错_python中空格和table混用报错原因
  6. [html] html页面中如何实现gif图片重新播放?
  7. C++中的数组与指针
  8. 监控WIN2003文件服务器上的文件夹和文件的复制、删除
  9. angularjs绑定属性_AngularJS隔离范围属性绑定教程
  10. EOSIO 指南(浏览源码)
  11. 长三角江浙沪有影响力的调查研究咨询公司
  12. 二、Win10如何解决svchost一直占用网速和内存?
  13. Prometheus通知模板参考
  14. 高德地图定位获取当前地址城市街道等详细信息(全部代码)
  15. ES6常见面试题(二)
  16. 亲身体验 北京-环球嘉年华!
  17. STM32寄存器ODR,BSRR和BRR
  18. 队列的定义、循环队列的顺序存储结构及链式存储结构
  19. 彻底掌握 Javascript(九)数组【讲师辅导】-曾亮-专题视频课程
  20. 漱口水的性别真的重要吗

热门文章

  1. 阿里腾讯京东三巨头手握保险牌照 互联网保险要迎来发展春天了吗?
  2. API Gateway技术设计
  3. html简单的任务管理系统实现,使用禅道来进行项目任务管理
  4. WGS84坐标系经纬度转地心坐标系坐标
  5. 介绍几款实用的MySQL和数据库Web客户端
  6. setRequestedOrientationonCreate不得不说的故事
  7. 如何实现Android两个模拟器之间的通信
  8. 四轴飞控DIY简明步骤介绍
  9. 门控开关项目--整流桥分析,LED限流电阻选择
  10. 王学岗——————三级联动