记:

本题目考的是最小生成数,可使用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. Python - Learn Note (3)

    Python之模块 包就是文件夹:包可以有多级: 模块就是 xxx.py文件:可以创建自己的模块,并且导入它们,模块的名字就和文件的名字相同: Python使用import语句导入一个模块. impo ...

  2. Thinking in Java 之classpath理解

    等待写: <Thinking in Java> page127

  3. 关系数据库ORMlite的用法;

    首先要在 http://ormlite.com/releases 页面下载两个jar 包: (1)core列表下的jar包: (2)android列表下的jar包. 将上面的两个jar包下载后放到An ...

  4. 关于apicloud ios自定义模块引用第三方framework not found for architecture armv7

    1 .自定义模块 新建模块必须是静态库 2.使用的第三方framework 必须要把 .h文件开放出来 3.编译要用 真机模式 (上传模块以后,自定义load要编译,用生成的二维码调试) 4. 添加监 ...

  5. GetTickCount()函数

    GetTickCount(),这个函数,在此做下整理和总结.1.定义For Release configurations, this function returns the number of mi ...

  6. mysql left join 查询

    inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 左连接实例: SELECT t. NAME, t1. ...

  7. TP使用易错知识点

    1.  redirect(U('Index/index'));     //redirect函数跳转要使用U方法,不适用U方法会跳转地址出错. 2.  $this->success('新增成功' ...

  8. TV-B-Gone Kit - Universal v1.2

  9. NBUT 1217 Dinner 2010辽宁省赛

    Time limit  1000 ms Memory limit  32768 kB Little A is one member of ACM team. He had just won the g ...

  10. 7.3 5种IO模型与IO复用

    5种IO模型分别如下: 1.阻塞IO模型 当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层app1将阻塞(默认行为,被linux内核阻塞). 当对等方发送了数据 ...