前置知识:最小生成树算法(Kruskal/Prim)

例题

算法分析:

这一道题中给出一个无向图,求从任意一点开始经过每一点的最短路径。

既然要经过每一个点,还要求最短路径,算法就是最小生成树了。

我用的是 Kruskal 算法。

有一点需要注意:每条路的长度需要如何计算?

约翰需要经过每一条道路两次,并且每走一次,就需要安慰这条路后的奶牛,所以路径长度=道路长度*2+安慰两头奶牛时间

代码如下:(因为几乎是 Kruskal 模板,所以没有注释)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct node
{LL x,y,dis;
}a[100000+10];
LL n,p,c[10000+10],fa[10000+10],t,ans;
bool cmp(node fir,node sec)
{return fir.dis<sec.dis;
}
LL gf(LL x)
{if(fa[x]==x) return x;return fa[x]=gf(fa[x]);
}
int main()
{scanf("%lld%lld",&n,&p);for(int i=1;i<=n;i++) scanf("%lld",&c[i]);for(int i=1;i<=p;i++){scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].dis);a[i].dis=a[i].dis*2+c[a[i].x]+c[a[i].y];}for(int i=1;i<=n;i++) fa[i]=i;sort(a+1,a+p+1,cmp);for(int i=1;t<n-1;i++){int fx=gf(a[i].x);int fy=gf(a[i].y);if(fx!=fy){fa[fx]=fy;ans+=a[i].dis;t++;}}sort(c+1,c+n+1);printf("%lld\n",ans+c[1]);return 0;
}

P2916 [USACO08NOV]Cheering up the Cow G 题解相关推荐

  1. 洛谷 P2916题解 【[USACO08NOV]Cheering up the Cow G】

    所需前置知识:邴茶吉 我个人觉得把所有东西写成函数会更方便 大多数简单的生成树都要写这些东西: 建结构体-->给结构体写比较函数 一模一样的并查集模板 重点的kruskal分为以下几步: 1.循 ...

  2. P2916 [USACO08NOV]安慰奶牛Cheering up the Cow

    题目 P2916 [USACO08NOV]安慰奶牛Cheering up the Cow 分析 这题开始不是很懂它的意思,看了题解才懂的.举个例子:有一条边 a->b 那么假定我们从a点出发再回 ...

  3. 洛谷P2851 [USACO06DEC]The Fewest Coins G 题解

    洛谷P2851 [USACO06DEC]The Fewest Coins G 题解 题目链接:P2851 [USACO06DEC]The Fewest Coins G 题意: Farmer John ...

  4. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

  5. 【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++

    原题传送门 这道题用最小生成树来完成,我选用的是kruskal(克鲁斯卡尔)来完成. 这道题目在克鲁斯卡尔模板的基础上,有变动的地方只有2处: 1.因为必须从一个点出发,而最小生成树最后会让所有点都连 ...

  6. 洛谷——P2916 [USACO08NOV]为母牛欢呼Cheering up the Cows

    https://www.luogu.org/problem/show?pid=2916 题目描述 Farmer John has grown so lazy that he no longer wan ...

  7. AtCoder Beginner Contest 252 A~G 题解

    前言 这是我第一次写7题(A~G)的ABC题解,若有写得不好或者不到位的地方请多多指教,我将万分感激,感谢大家的支持! ABC252 A~G [A - ASCII code](https://atco ...

  8. AtCoder Beginner Contest 217 A B C D E G 题解

    第一次6题纪念第一次6题纪念第一次6题纪念 A - Lexicographic Order 题意: s字符串的字典序是否小于ts字符串的字典序是否小于ts字符串的字典序是否小于t 思路: 模拟模拟模拟 ...

  9. 2020 GDUT Rating Contest I (Div. 2) A - Cow Gymnastics 题解

    好吧--是时候补一下题解了 原题 题目大意 给出n只牛,k次排序,如果有一只牛一直比另外一只牛更前算作一对,输出一共有多少对. 题目分析 水题(数据规模小),一开始初始化全部都可以,然后一个个删去就行 ...

最新文章

  1. cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
  2. 2021 CSDN年度回忆录
  3. Linux系统文件I/O编程(一)---open()等基本函数
  4. 兰山天书(贺兰山岩画)
  5. [故障引起的故事]URL中带加号(+)的处理
  6. Linux学习之系统编程篇:利用 setitimer 实现 alarm练习
  7. Java学习进度(2013.03.13)—Struts2学习一
  8. window.open怎么设置title_企业seo怎么优化 都有那些策略?
  9. for 循环新的写法==列表解析
  10. matlab 梯度下降 求偏导,通过计算图求梯度下降中各偏导的推导
  11. 下载Youtube单个视频和播放列表的方法详细教程
  12. matlab的omega0是什么,ABO设定中,A具体是怎么标记O的?
  13. 一看就停不下来的中国史
  14. AVL树(动图详解)
  15. 信息学奥赛一本通:1084:幂的末尾
  16. 按降序显示奇数python_程序在Python中分别以升序和降序对所有偶数和奇数进行排序...
  17. 使用protractor操作页面元素
  18. 收藏的网页--视频教程
  19. 配置公共字段全局填充createTime和updateTime
  20. 基于canal根据配置实现数据库数据的同步

热门文章

  1. 细胞亚器文献阅读二~An ER-Mitochondria Tethering Complex Revealed by a Synthetic Biology Screen
  2. 怎么做微信小程序?做微信小程序的步骤
  3. jira -workflow之父级任务关注人copy到子任务
  4. 【Unity Shader】 CubeMap(立方体贴图)
  5. 关于屏保设置不生效时要了解的几个小技巧!
  6. Oracle 实现小计、合计
  7. 博客园添加目录,导航,回到顶部
  8. android正反面切换,普通安卓手机数据线可以正反插吗?你一定猜错了
  9. linux中pe中文名称,原来如此,Linux系统也有PE,不过它叫...
  10. 【软件测试】软件测试随手记