记:

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

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

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

示例代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define INF 99999999
  4.  
  5. typedef struct node node_t;
  6. typedef struct node
  7. {
  8. int S;
  9. int E;
  10. int L;
  11. }node;
  12. node e[];
  13.  
  14. int N,P; /*N个结点,P条路*/
  15. int c[]; /*纪录在牧场逗留的时间*/
  16. int d[]; /*纪录牧场之间的距离*/
  17.  
  18. void sort(int x, int y)
  19. {
  20. int i = x , j = y;
  21. node p;
  22. p = e[i];
  23. if (i < j)
  24. {
  25. while (i < j)
  26. {
  27. while (i < j && e[j].L > p.L)
  28. {
  29. j --;
  30. }
  31. if (i < j)
  32. {
  33. e[i] = e[j];
  34. i ++;
  35. }
  36. while (i < j && e[i].L < p.L)
  37. {
  38. i ++;
  39. }
  40. if (i < j)
  41. {
  42. e[j] = e[i];
  43. j --;
  44. }
  45. }
  46. e[i] = p;
  47. sort(x,i-);
  48. sort(i+,y);
  49. }
  50. return ;
  51. }
  52.  
  53. int find(int x)
  54. {
  55. if (x == d[x])
  56. {
  57. return x;
  58. }
  59. d[x] = find(d[x]);
  60. return d[x];
  61. }
  62.  
  63. int Kruskal()
  64. {
  65. int i;
  66. int S,E;
  67. int sum = , count = ;
  68. for (i = ; i <= N ; i ++)
  69. {
  70. d[i] = i;
  71. }
  72.  
  73. sort(,P);
  74.  
  75. for (i = ; i <= P ; i++)
  76. {
  77. S = find(e[i].S);
  78. E = find(e[i].E);
  79. if (S != E)/*两点没有交集*/
  80. {
  81. sum += e[i].L;
  82. d[S] = e[i].E;
  83. count ++;
  84. if (count == N)
  85. {
  86. break;
  87. }
  88. }
  89. }
  90. return sum;
  91. }
  92.  
  93. int main(void)
  94. {
  95. int i = , min = INF;
  96. int S,E,L;
  97.  
  98. scanf("%d %d",&N,&P);
  99.  
  100. for (i = ; i <= N ; i ++)
  101. {
  102. scanf("%d",&c[i]);
  103. if (c[i] < min)
  104. {
  105. min = c[i];
  106. }
  107. }
  108.  
  109. for (i = ; i <= P ; i ++)
  110. {
  111. scanf("%d %d %d",&S,&E,&L);
  112. e[i].S = S;
  113. e[i].E = E;
  114. e[i].L = L* + c[S] + c[E];
  115. }
  116.  
  117. printf("%d",min+Kruskal());
  118. return ;
  119. }

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. POJ 2516 Minimum Cost 最小费用流 难度:1

    Minimum Cost Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 13511   Accepted: 4628 Des ...

  2. Activity与Service数据交互:Binder、bindService的用法

    package com.lixu.jiaohu; import com.lixu.jiaohu.MyAppService.Mybind; import android.app.Activity; im ...

  3. EhLib TitleButton SVisibleColumnsEh = '错误的列';

    unit EhLibConsts; interface resourcestring SClearSelectedCellsEh = '清除选择的单元?'; SInvalidTextFormatEh ...

  4. struts2的execAndWait拦截器

    struts2中有许多默认拦截器,这里我们看一下execAndWait拦截器. 当一个页面需要加载一段时间的时候,我们希望它不是一直呆在原页面直到加载完成,而是进入等待页面,加载完毕后自动进入目标页面 ...

  5. 【转】DelphiXE10.2.3——跨平台生成验证码图片

    原文地址 Java.PHP.C#等很容易在网上找到生成验证码图片的代码,Delphi却寥寥无几,昨天花了一整天时间,做了个跨平台的验证码,可以用在C/S和B/S端,支持Windows.Linux.An ...

  6. 37行代码实现一个简单的打游戏AI

    不废话,直接上码,跟神经网络一点关系都没有,这37行代码只能保证电脑的对敌牺牲率是1:10左右,如果想手动操控,注释掉autopilot后边的代码即可. 哪个大神有兴趣可以用tensorflow或者s ...

  7. Swift中WebView的应用

    WebView控件是做网络应用开发中使用最多的控件,直接在WebView内部指定一个网页地址就可以访问网页了,同时也可以实现UIWebViewDelegate协议实现相应的方法去控制内容的加载和处理. ...

  8. HP LoadRunner 12.02 Tutorial T7177-88037教程独家中文版

    HP LoadRunner 12.02 Tutorial T7177-88037教程独家中文版 Tylan独家呕血翻译 转载请注明出自“天外归云”的博客园 Welcome to the LoadRun ...

  9. 2.1 Linux中wait、system 分析

    wait与waitpid: 当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止). 子进程退出时,内核将子进程置为僵尸状态,这个 ...

  10. SVM核技巧之终极分析

    参考文献: http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html http://www.cnblogs.com/jerry ...