坏的牛圈建筑

  题目大意:就是现在农夫又要牛修建牛栏了,但是农夫想不给钱,于是牛就想设计一个最大的花费的牛圈给他,牛圈的修理费用主要是用在连接牛圈上

  这一题很简单了,就是找最大生成树,把Kruskal算法改一下符号就好了,把边从大到小排列,然后最后再判断是否联通(只要找到他们的根节点是否相同就可以了!)

  

  1 #include <iostream>
  2 #include <algorithm>
  3 #include <functional>
  4 #define MAX_N 1005
  5 #define MAX 20005
  6
  7 using namespace std;
  8
  9 typedef int Position;
 10 typedef struct _edge
 11 {
 12     Position from;
 13     Position to;
 14     int cost;
 15 }Edge_Set;
 16 int fcomp(const void *a, const void *b)
 17 {
 18     return (*(Edge_Set *)b).cost - (*(Edge_Set *)a).cost;
 19 }
 20
 21 static Edge_Set edge[MAX];
 22 static Position Set[MAX_N];
 23
 24 Position Find(Position);
 25 void Union(Position, Position);
 26 void Kruskal(const int, const int);
 27 bool Is_Connected(const int);
 28
 29 int main(void)
 30 {
 31     int Node_Sum, Path_Sum, cost;
 32     Position tmp_from, tmp_to;
 33
 34     while (~scanf("%d%d", &Node_Sum, &Path_Sum))
 35     {
 36         for (int i = 0; i < Path_Sum; i++)//读入边
 37         {
 38             scanf("%d%d%d", &tmp_from, &tmp_to, &cost);
 39             edge[i].from = tmp_from; edge[i].to = tmp_to; edge[i].cost = cost;
 40         }
 41         qsort(edge, Path_Sum, sizeof(Edge_Set), fcomp);
 42         Kruskal(Node_Sum, Path_Sum);
 43     }
 44     return 0;
 45 }
 46
 47 Position Find(Position x)
 48 {
 49     if (Set[x] < 0)
 50         return x;
 51     else return Set[x] = Find(Set[x]);
 52 }
 53
 54 void Union(Position px, Position py)
 55 {
 56     if (Set[px] < Set[py])
 57     {
 58         Set[px] += Set[py];
 59         Set[py] = px;
 60     }
 61     else
 62     {
 63         Set[py] += Set[px];
 64         Set[px] = py;
 65     }
 66 }
 67
 68 bool Is_Connected(const int Node_Sum)
 69 {
 70     Position p_u, p_tmp;
 71     p_u = Find(1);
 72     for (int i = 2; i <= Node_Sum; i++)
 73     {
 74         p_tmp = Find(i);
 75         if (p_u != p_tmp)
 76             return false;
 77     }
 78     return true;
 79 }
 80
 81 void Kruskal(const int Node_Sum, const int Path_Sum)
 82 {
 83     Position px, py, from, to;
 84     long long ans = 0;
 85
 86     fill(Set, Set + Node_Sum + 1, -1);
 87     for (int i = 0; i < Path_Sum; i++)
 88     {
 89         from = edge[i].from; to = edge[i].to;
 90         px = Find(from); py = Find(to);
 91
 92         if (px != py)
 93         {
 94             ans += edge[i].cost;
 95             Union(px, py);
 96         }
 97     }
 98     if (Is_Connected(Node_Sum))
 99         printf("%lld\n", ans);
100     else
101         printf("-1\n");
102 }

转载于:https://www.cnblogs.com/Philip-Tell-Truth/p/4955944.html

MST:Bad Cowtractors(POJ 2377)相关推荐

  1. 【POJ - 2377】Bad Cowtractors (最大生成树,并查集)

    题干: Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1 ...

  2. (poj 2377)Kruskal算法 最大生成树

    这道题只是一道模板题,感到唯一的坑点就是n,m容易打错,一定要注意结构体要开到Max(M)+n; 之前便是因为这个地方Runtime Error了两次;顺便注意最后输出的答案 为long long型 ...

  3. 挑战程序设计竞赛(第二章习题总结)

    文章目录 搜索 Curling 2.0(POJ 3009) Meteor Shower(POJ 3669) Smallest Difference(POJ 2718) Hopscotch(POJ 30 ...

  4. POJ 图论---1_Uriel's Corner Uriel's Coding Learning Cubing Zone

    原文地址: http://www.cppblog.com/Uriel/articles/121814.html 内容: 刚开始学图论不久,这个是自己做过的一点图论水题,不一定全,有什么错误或者大家有其 ...

  5. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  6. 2019.9.18最小生成树知识点总结

    HDU 4081 Qin Shi Huang's National Road System(次小生成树-Kruskal) 博主的方法很好,但是有疑问,为什么不能将最多人口的两城市的距离设置为0,在进行 ...

  7. 2019.9.17最小生成树知识点回顾

    POJ 1797 Heavy Transportation(最大生成树-Prim) 最大生成树,方法模仿最小生成树,每次选最大边进行操作,即可. HDU 5723 Abandoned country( ...

  8. 【POJ】2377 Bad Cowtractors(最大生成树)

    简单题,模板题 求解最大生成树,提交一直WA,感觉没有什么问题啊,就是在求解最小生成树的模板基础上稍加修改即可,后来发现在输出a,b,c给map二维数组的时候还必须有判断条件,略为有点坑,因为之前做的 ...

  9. POJ 1679 The Unique MST(次小生成树)

    求次小生成树的两种方法. 第一种:Kruskal算法比较好操作.先求一遍最小生成树,然后再记录最小生成树上的边.然后再枚举删去最小生成树上的边,再求最小生成树,如果求出的最小生成树的花费等于第一次最小 ...

最新文章

  1. 确认AD DS域是否正常
  2. 黑马lavarel教程---10、lavarel模型关联
  3. 嵌入式系统中系统时间显示
  4. tab与list配合使用
  5. 《Adobe Photoshop大师班:经典作品与完美技巧赏析》即将上市
  6. 多语言 获取当前语言
  7. 使用ASP.NET Core和Entity Framework Core实现Angular 7 SPA CRUD
  8. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十五)
  9. eclipse中设置java注释模板
  10. 47 Majority Element II
  11. 团队作业—第二阶段08
  12. centos Install Docker
  13. 科技圈晒开工福利!小米最直接,腾讯最传统,阿里最豪气,你们家的呢?
  14. Mac Appium 安装
  15. PDF有编辑密码怎么办?该怎么去除
  16. 5.1 Lilypond五线谱
  17. 【ADNI】数据预处理(3)CNNs
  18. MySQL——页和索引
  19. 前端的长度单位有哪些
  20. 360漏洞修复的提取

热门文章

  1. PropertyGrid 控件使用方法
  2. 7.25第一次组队赛
  3. [工具库]JFileDownloader工具类——多线程下载网络文件,并保存在本地
  4. 用js实现导航栏shoufang效果_【读者投稿】用Github+docsify,我花了半天就搭好了个人博客...
  5. echarts 弹出放大_Echarts图标增加全屏/放大功能
  6. AUTOSAR从入门到精通100讲(三十五)-AUTOSAR BswM三部曲-概念实践代码分析
  7. 计算机ip地址未修复连接不了无线网络,本地连接没有有效的ip配置,教您修复本地连接没有有效的ip配置...
  8. H5工程师在谷歌浏览器调试并开发原生APP项目的解决办法
  9. 有什么好一点的方法读jdk源码吗?
  10. 各大银行对应的字段(仅做参考)