总所周知,Keven永远都在峡谷之巅快乐。这次还拉上了dh打父子局,理所当然他们要输了。dh直接拉闸、拔网线一气呵成,熟练地让人心疼。Keven还不想放弃挣扎,他想问问你如何让他的网络和所有人取得连接,既他与任意网络直接都有一条通路,而且还要代价最小。

简化问题为,有 n 个节点(从1到 n 编号,Keven txdy所以他是1号),有m条边相互连接,代价为 W​i,j​​ 。问你让Keven和所以节点取得连接的最小代价。

输入格式:

第一行两个整数 n , m (1<=n<=100000,1<=m<=500000)

接下来 m 行,每行三个整数 A,B,C 表示 A,B 之间建立连接需要 C 的代价(1<=A,B<=n,1<=C<=1000)

输出格式:

在一行中输出最小的代价,如果无法连通则输出"dh yyds"(不含双引号)

输入样例:

在这里给出一组输入。例如:

5 8
4 5 9
3 3 4
3 4 10
3 3 10
3 5 7
3 1 4
4 4 4
2 4 9

输出样例:

在这里给出相应的输出。例如:

29

思路:

该题为最小生成树问题,但是需要判断是否是连通图,那么就在最小生成树算法的基础上增加一个记录值,来记录当前共有多少个连通块。

如果最小生成树生成完毕后,连通块不只有一个,那么就判定两个网络之间必有不连通的部分,所以……dh yyds!

否则就表示整个网络都是连通的,输出权重即可。

代码:


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10 , M = 5e5 + 10;struct Edge {int a, b, w;
};int fa[N];
int n , m;
Edge edge[M];void init() {for(int i = 0 ; i < N ; i++)fa[i] = i;
}int find(int x) {return fa[x] = fa[x] == x ? x : find(fa[x]);
}bool cmp(Edge a , Edge b) {return a.w < b.w;
}int main() {init();cin>>n>>m;for(int i = 0 ; i < m ; i++)cin>>edge[i].a>>edge[i].b>>edge[i].w;sort(edge , edge + m , cmp);int cnt = n , ans = 0;for(int i = 0 ; i < m ; i++) {int a = edge[i].a , b = edge[i].b , w = edge[i].w;//     cout<<a<<" "<<b<<" "<<w<<" "<<find(a)<<" "<<find(b)<<endl;if(find(a) != find(b)) {// 连通块-1cnt--;// 生成树总权重加上ans += w;// 使两个连通块连通,也就是两个网络(群)连通fa[find(a)] = find(b);}}// 如果有多个连通块,也就是多个网络,那么就意味着肯定至少有两个网络之间是不连通的,所以dh yydsif(cnt != 1)cout<<"dh yyds"<<endl;elsecout<<ans<<endl;return 0;
}

L2-4 父子局 (25 分)相关推荐

  1. 【CCCC】L2-022 重排链表 (25分),,链表遍历

    problem L2-022 重排链表 (25分) 给定一个单链表 L ​1 ​​ →L ​2 ​​ →⋯→L ​n−1 ​​ →L ​n ​​ ,请编写程序将链表重新排列为 L ​n ​​ →L ​ ...

  2. 【CCCC】L2-011 玩转二叉树 (25分),二叉树建树与遍历(我讨厌树,@L2-006)

    problem L2-011 玩转二叉树 (25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设 ...

  3. 【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整

    problem L2-012 关于堆的判断 (25分) 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: ...

  4. 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)

    problem L2-006 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30), ...

  5. 【CCCC】L2-002 链表去重 (25分),,把一个链表拆成两个

    problem L2-002 链表去重 (25分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点 ...

  6. c语言寻找大富翁,PTA 7-38 寻找大富翁(25 分)解法(C/C++)暴力快排/精准堆排 解法...

    7-38 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  7. 天梯赛:L2-001 紧急救援 (25 分)

    题目详情 - L2-001 紧急救援 (25 分) (pintia.cn) 题解:使用dijkstra算法就可以了,难点在于如何存储路径.我首先十分单纯的用了pair<int,int>进行 ...

  8. L2-030 冰岛人 (25分)

    L2-030 冰岛人 (25分) 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普如下: 冰岛人沿 ...

  9. L2-030 冰岛人 (25 分) unordered_map

    L2-030 冰岛人 题目 代码 题目 L2-030 冰岛人 (25 分) 冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir.因为冰岛 ...

最新文章

  1. LintCode: Edit Distance
  2. OpencvSharp的踩坑之路
  3. php变量的数据类型
  4. Mysql 8.0 安装
  5. 外部表在Hive中的使用
  6. phpzend框架_PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
  7. springMVC ---- 异步调用
  8. oracle将列名进行拼接,请教关于用拼接的字符串作为表的列名进行操作的问题
  9. hadoop 开发环境设置以及可运行jar包生成
  10. vue项目 报sockjs.js?9be2:1606 GET http://192.168.43.226:8080/sockjs-node/info?t=1584966826465 net::ERR
  11. 分布式光纤振动传感技术在电力电缆管道防外力破坏的应用
  12. 基于经纬度做航线图可视化
  13. MapReducer的map和reducer的几种写法模板以及自定义数据类型
  14. Vulkan_Ray Tracing 09_反射
  15. 关于win10开始菜单点击无反应解决方案
  16. 树莓派4b 3.5inch显示屏+远程+FTP+建站
  17. IT开发工程师经典面试
  18. HTML5+CSS3期末大作业——城市简介
  19. uc浏览器返回按钮的兼容_浏览器的返回、后退、上一页按钮的事件方法
  20. 图片与文字排版-flex

热门文章

  1. 如何恢复 Linux 上删除的文件
  2. [2018 CS:GO Client]2018 Old CSGO 客户端,回忆逝去的青春!
  3. 中国第一块区块链牌照
  4. iOS利用系统分享实现分享视频功能
  5. java项目生成manifest_使用Maven生成manifest
  6. 【D3D11游戏编程】学习笔记十一:基本几何体绘制
  7. 管理大师明茨伯格:成功的领导者是什么样的?
  8. 以简洁且简单的方式安装Kali虚拟机(VirtualBox),以及安装后的简单配置
  9. 微信圈朋友圈代理怎么做
  10. 大型B2C网站如何做好EDM营销