蓝桥杯 算法训练 安慰奶牛

 算法训练 安慰奶牛  

时间限制:1.0s   内存限制:256.0M

问题描述

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 6
10
10
20
6
30
1 2 5
2 3 5
2 4 12
3 4 17
2 5 15
3 5 6

样例输出

178

数据规模与约定

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

思路:奶牛的牧场之间是一棵树,会发现,对于每条边,我们花费的时间是二倍的边权值加上两
个端点的权值。将每条边(a, b)的权值Lj改变为2Lj+Ca+Cb,然后使用最小生成树来计算。

至于选择过夜的地方,根据题意,最后要多花费一个点权。找最小的即可

注意:蓝桥杯给的测试数据是错误的,正确的请看上面的测试数据!!

AC代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
   int a,b;
   int len;
}per[100010];
int cmp(node x,node y)
{
    if(x.len!=y.len) return x.len<y.len;
}
int Time[10010];
int main()
{
    int i,j,n,m,flag[10010],sum,num;
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++)
    {
       scanf("%d",&Time[i]);
    }
    for(i=0;i<m;i++)
    {
       scanf("%d%d%d",&per[i].a,&per[i].b,&per[i].len);
       per[i].len=Time[per[i].a-1]+Time[per[i].b-1]+per[i].len*2;
    }
    sort(per,per+m,cmp);
    for(i=1;i<=n;i++) flag[i]=1;
       flag[per[0].a]=0;
       sum=0;
       for(i=0;i<m;i++)
       {
          num=flag[per[i].a]+flag[per[i].b];
          if(num==1)
          {
             sum+=per[i].len;
             flag[per[i].a]=flag[per[i].b]=0;
             i=0;
          }
       }
       sort(Time,Time+n);
       printf("%d\n",sum+Time[0]);
    return 0;
}
时间: 2024-09-19 09:39:28

蓝桥杯 算法训练 安慰奶牛的相关文章

蓝桥杯-算法训练2 最大最小公倍数

刚做了,蓝桥杯算法训练的最大最小公倍数一题,感觉考查的是数学了,哈哈. 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 10^6. 思路如下: 1. n是奇数,那就最大的三个数相乘 2. n是偶数,得分两种情况了, ①如果n不是3的倍数,那就s=n*(n-1)

蓝桥杯-算法训练 操作格子

算法训练 操作格子   时间限制:1.0s   内存限制:256.0MB        问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值. 对于每个2.3操作输出你所求出的结果. 输入格式 第一行2个整数n,m. 接下来一行n个整数表示n个格子的初始权值. 接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权

蓝桥杯-算法训练51-Torry的困惑(基本型)

今天做这道题最初以为会用到什么数学公式,在思考后发现自己想多了. 思路主要两个: 1. 生成一个质数表,再按要求求值(本文就按此方法): 2.从小取到大,判断是否是质数,如果是就相乘,并构建计数器判断是否达到n个. 算法训练 Torry的困惑(基本型)   时间限制:1.0s   内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题

lift and throw-蓝桥杯-算法训练 Lift and Throw 求教各位大牛,谢谢各位

问题描述 蓝桥杯-算法训练 Lift and Throw 求教各位大牛,谢谢各位 问题描述 给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点. 每个角色只能进行下面的3种操作, 且每种操作每人不能进行超过一次. 1.移动一定的距离 2.把另一个角色高举过头 3.将举在头上的角色扔出一段距离 每个角色有一个movement range参数

蓝桥杯 算法问题 求解

问题描述 蓝桥杯 算法问题 求解 问题描述 给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点. 每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次. 1.移动一定的距离 2.把另一个角色高举过头 3.将举在头上的角色扔出一段距离 每个角色有一个movement range参数, 他们只能移动到没有人的位置, 并且起点和

蓝桥杯 算法提高 日期计算

  算法提高 日期计算  时间限制:1.0s   内存限制:256.0MB       问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情况. 输入格式 输入只有一行 YYYY MM DD 输出格式 输出只有一行 W 数据规模和约定 1599 <= YYYY <= 2999 1 <= MM <= 12 1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期 1

java-蓝桥杯算法提高 最大值问题

问题描述 蓝桥杯算法提高 最大值问题 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负. 输入格式 输入的第一行为n,数对的个数 以下n行每行两个整数 ai bi 输出格式 输出你选定的数对的ai+bi之和 样例输入 5 -403 -625 -847 901 -624 -708 -293 413 886 709 样例输出 1715 数据规模和约定 1<=n<=100 -1000<=ai,b

c-大神们!这个程序在没有错误,能运行,为什么一到蓝桥杯提交时间就会显示编译错误的?

问题描述 大神们!这个程序在没有错误,能运行,为什么一到蓝桥杯提交时间就会显示编译错误的? . 评测结果 编译出错 得分 0 CPU使用 编译出错 内存使用 编译出错 试题名称 算法训练 P1103 语言 C 源代码 #include #include #include struct fushu{ double real; double i; }; fushu* add(fushu a, fushu b){ fushu* ret = (fushu*)malloc(sizeof(fushu));

2013第四届蓝桥杯 C/C++本科A组 真题答案解析【交流帖】

今年的蓝桥杯又已经结束了,做的还是不怎么样,很多题目不难但就是算不出最终的结果,很是纠结,看来路还很长,另外昨天(2013-5-7)也受到了也受到了微软的thank you letter了,哎,都是苦逼的一天.不说了,直接看题吧,如果你对我的做法有异议或者有更好的解法,请给我留言,我会及时更新~~~~~ 1.高斯日记  大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯