记:

本题目考的是最小生成数,可使用Kruskal算法

第一次,20分  原因:使用动态数组,有概率报运行错误(大雾= =)

第二次,100分  原因:改用静态数组,一次过

示例代码:

 #include <stdio.h>
#include <stdlib.h>
#define INF 99999999 typedef struct node node_t;
typedef struct node
{
int S;
int E;
int L;
}node;
node e[]; int N,P; /*N个结点,P条路*/
int c[]; /*纪录在牧场逗留的时间*/
int d[]; /*纪录牧场之间的距离*/ void sort(int x, int y)
{
int i = x , j = y;
node p;
p = e[i];
if (i < j)
{
while (i < j)
{
while (i < j && e[j].L > p.L)
{
j --;
}
if (i < j)
{
e[i] = e[j];
i ++;
}
while (i < j && e[i].L < p.L)
{
i ++;
}
if (i < j)
{
e[j] = e[i];
j --;
}
}
e[i] = p;
sort(x,i-);
sort(i+,y);
}
return ;
} int find(int x)
{
if (x == d[x])
{
return x;
}
d[x] = find(d[x]);
return d[x];
} int Kruskal()
{
int i;
int S,E;
int sum = , count = ;
for (i = ; i <= N ; i ++)
{
d[i] = i;
} sort(,P); for (i = ; i <= P ; i++)
{
S = find(e[i].S);
E = find(e[i].E);
if (S != E)/*两点没有交集*/
{
sum += e[i].L;
d[S] = e[i].E;
count ++;
if (count == N)
{
break;
}
}
}
return sum;
} int main(void)
{
int i = , min = INF;
int S,E,L; scanf("%d %d",&N,&P); for (i = ; i <= N ; i ++)
{
scanf("%d",&c[i]);
if (c[i] < min)
{
min = c[i];
}
} for (i = ; i <= P ; i ++)
{
scanf("%d %d %d",&S,&E,&L);
e[i].S = S;
e[i].E = E;
e[i].L = L* + c[S] + c[E];
} printf("%d",min+Kruskal());
return ;
}

ALGO-6_蓝桥杯_算法训练_安慰奶牛的更多相关文章

  1. [蓝桥杯]ALGO-20.算法训练_求先序排列

    问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...

  2. [蓝桥杯]ALGO-16.算法训练_进制转换

    问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*102+2*101+3*100这样 ...

  3. [蓝桥杯]ALGO-15.算法训练_旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  4. [蓝桥杯]ALGO-124.算法训练_数字三角形

    问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●<三角形行数≤: ●三角 ...

  5. [蓝桥杯]ALGO-122.算法训练_未名湖边的烦恼

    问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...

  6. [蓝桥杯]ALGO-116.算法训练_最大的算式

    问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...

  7. [蓝桥杯]ALGO-101.算法训练_图形显示

    问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...

  8. [蓝桥杯]ALGO-97.算法训练_排序

    题目描述: 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出 ...

  9. [蓝桥杯]ALGO-92.算法训练_前缀表达式

    问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法).“-”(减法).“*”(乘法)或“/”(除法),运算对象为 ...

  10. [蓝桥杯]ALGO-90.算法训练_出现次数最多的整数

    问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...

随机推荐

  1. Openwrt Support RESET Button (5)

    1 Scope of Document This document describes how to support reset button under openwrt system2 Requir ...

  2. 快速切题 usaco ariprog

    题目:给定3<=n<=25,m<250,求m及以内的两两平方和能否构成为n的等差数列 1 WA 没有注意到应该按照公差-首项的顺序排序 2 MLE 尝试使用桶,但是实际上那可能是分散 ...

  3. net负载均衡服务器架构网址

    https://blog.csdn.net/orichisonic/article/details/71122291 https://blog.csdn.net/huangxiangec/articl ...

  4. Python Django 前后端数据交互 之 HTTP协议下GET与POST的区别

    99%的人都理解错了HTTP中GET与POST的区别(转自知乎)   作者:Larry链接:https://zhuanlan.zhihu.com/p/22536382来源:知乎著作权归作者所有.商业转 ...

  5. 所谓的规范以及JDK api文档的重要性

    所谓的规范,就是在jee api 文档里对应的接口. 可以从jdk文档和jee文档的目录结构,接口中获取对整个编程范围的把握

  6. poj 3984 -- 迷宫问题 深搜

    迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...

  7. 难度2:ASCII码排序

    ASCII码排序 难度:2描述: 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入: 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据 ...

  8. vector中erase用法注意事项

    以前就发现了vector中的erase方法有些诡异(^_^),稍不注意,就会出错.今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin() 和vector.e ...

  9. 打开ahci模式

    打开ahci模式(sata)的正确步骤:    1.安装系统前在bios中将硬盘模式设置为ide兼容模式(别说你不会哦),然后安装系统,建议安装微软原版系统或是官方oem原版系统:    2.系统安装 ...

  10. jquery 实现内容的级联选取