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

场被连续地编号为1到N。每一个牧场都是一个奶牛的家。FJ计划除去P条道路中尽可能多的道路,但

是还要保持牧场之间 的连通性。你首先要决定那些道路是需要保留的N-1条道路。第j条双向道路连

接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间。没有两个牧

场是被一条以上的道路所连接。奶牛们非常伤心,因为她们的交通系统被削减了。你需要到每一个奶

牛的住处去安慰她们。每次你到达第i个牧场的时候(即使你已经到过),你必须花去Ci的时间和奶牛

交谈。你每个晚上都会在同一个牧场(这是供你选择的)过夜,直到奶牛们都从悲伤中缓过神来。在早

上 起来和晚上回去睡觉的时候,你都需要和在你睡觉的牧场的奶牛交谈一次。这样你才能完成你的

交谈任务。假设Farmer John采纳了你的建议,请计算出使所有奶牛都被安慰的最少时间。
输入格式
第1行包含两个整数N和P。
接下来N行,每行包含一个整数Ci。
接下来P行,每行包含三个整数Sj, Ej和Lj。
输出格式
输出一个整数, 所需要的总时间(包含和在你所在的牧场的奶牛的两次谈话时间)。
样例输入
5 7
10
10
20
6
30
1 2 5
2 3 5
2 4 12
3 4 17
2 5 15
3 5 6
4 5 12
样例输出
176
数据规模与约定

5 <= N <= 10000,N-1 <= P <= 100000,0 <= Lj <= 1000,1 <= Ci <= 1,000。

首先这个题是最小生成树问题,但是没有现成的生成树,所以我们就先构造一个。对于每条边,如果选的话,则要耗去来回一趟和访问2个端点所用的的时间总合,所以将图中各个边的权值改为边本来的权值的两倍加上访问两端点的值,这样一棵树就构造好。至于住在哪间房里面,选择Ci最小的那一间就可以了。

接下来就是运用最小生成树的算法,在我用kruscal算法的过程中,也发现了我以前写这个算法的一个错误,虽然花了我很多时间去找这个错误。。。但是以后肯定是不会再错了,总之这道题还是很有收获的。

#include <stdio.h>
#include <stdlib.h>struct node
{int x, y;int w;
};
node s[100010];
int l, sum;
int f[10010];
int talk[10010];void init()
{int i;for(i = 0; i < 10010; i++)f[i] = i;
}int cmp(const void *a, const void *b)
{return (((node *)a)->w - ((node *)b)->w);
}void kruscal(int n)
{int q;qsort(s, l, sizeof(s[0]), cmp);int num = 1, i, j;int k = 0;while(num < n){if(f[s[k].x] != f[s[k].y]){num++;sum += s[k].w;//printf("%d - %d = %d, sum = %d\n", s[k].x, s[k].y, s[k].w, sum);q = f[s[k].y];for(j = 1; j <= n; j++){if(f[j] == q)//之前这里写的是if(f[j] == f[s[k].y]),结果都是WAf[j] = f[s[k].x];}}k++;}}int main (void)
{int n, p, i;while(scanf("%d %d", &n, &p) != EOF){init();l = 0;sum = 0;int min = 9999;for(i = 1; i <= n; i++){scanf("%d", &talk[i]);if(min > talk[i])min = talk[i];}int temp;for(i = 0; i < p; i++){scanf("%d %d %d", &s[l].x, &s[l].y, &temp);s[l].w = talk[s[l].x] + talk[s[l].y] + 2 * temp;l++;}/*for(i = 0; i < l; i++)printf("%d   ", s[i].w);printf("\n");*/kruscal(n);printf("%d\n", sum + min);/*printf("----------------------------\n");for(i = 0; i < l; i++){printf("%d - %d = %d\n", s[i].x, s[i].y, s[i].w);}*/}return 0;
}

安慰奶牛 (算法训练)相关推荐

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

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

  2. 讲解 算法训练 安慰奶牛

    首先谈谈这道题的基本思路吧,题目中谈到要将P条道路尽可能的去减少,并保证个点之间是可达的,同时要求其最小时间. 很明显的去告诉我们,用最小生成树算法. 最小生成树算法有两种, 1.克鲁斯卡尔算法 2. ...

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

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

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

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

  5. 算法训练:嘘,别人我不告诉TA

    算法训练:嘘,别人我不告诉他 算法 or 游戏 基础的设计能力:不知道如何下手怎么办? 基础的建模能力:数组.链表,以及改进的结构 解题技巧:也说不清楚,就是对这道题有 feel 呀! 攻略:新手.老 ...

  6. 安慰奶牛 问题描述 Farmer John变得非常懒,他不想再继续维

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

  7. 目前最好用的大规模强化学习算法训练库是什么?

    点击蓝字  关注我们 本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系后台作删文处理. 本文精选知乎问题"目前最好用的大规模强化学习算法训练库是什么?"评论区 ...

  8. 可由一个尾指针唯一确定的链表有_极客算法训练笔记(三),链表详细图解,别再逃避了朋友...

    目录 缓存引爆链表 链表单链表双向链表循环链表双向循环链表 LinkedHashMap实现LRU缓存,源码解析(JDK1.8) 算法 爬楼梯 算法 反转链表 算法 链表环检测 缓存引爆链表 存储结构 ...

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

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

最新文章

  1. Python基本数据类型之元组
  2. STM32的启动分析
  3. setContentView( )方法
  4. matlab 定义一个有自变量的方程_常微分方程:(第四章) 高阶微分方程
  5. 下面哪个选项不是oracle用户,作业三(有答案)
  6. hadoop 配置文件
  7. okvis odometry的安装与运行
  8. 【边缘检测】基于matlab蚁群算法图像边缘检测【含Matlab源码 1189期】
  9. c语言城市交通灯优化,城市智能交通灯系统(本科)毕业论文.doc
  10. 模数转换芯片AD7705的使用心得
  11. 只需三步!查看笔记本电脑连接的WiFi密码
  12. 消息中间件----ActiveMQ
  13. 计算机加法的运算规则,计算机眼中的加法运算
  14. java deflate解压_Java解压缩用zlib deflate压缩的字符串
  15. 西南石油大学天空教室_学府之旅 | 西南石油大学
  16. 前端console.log打印内容与后端请求返回数据不一致
  17. 计算机基本配置要求,win10系统对电脑配置有哪些要求?windows10的最低配置要求...
  18. 微信小程序调用相册和相机
  19. PS2键盘第二套键盘扫描码学习发现
  20. 9 个非常实用的网络调试命令

热门文章

  1. Windows Live Mail直接修改附件保存关闭后,如何恢复
  2. org.gjt.xpp.XmlPullParserException 错误解决
  3. 使用OpenCV识别二维码
  4. SQL:复制表结构或结构和数据 到一个新表
  5. javaweb网上购物系统设计与实现(开题报告+任务书+外文翻译+论文+源码).rar
  6. uniapp中图片宽度100%,高度自适应
  7. PyTorch搭建神经网络求解二分类问题
  8. 【个人博客网站】搭建引导手册
  9. python list去重 set和list互转
  10. 本地网站无服务器,0基础,无需域名服务器,手把手教你搭建本地电脑的影视播放网站...