[板子]Kruskal
众所周知求最小生成树的两种方法:
1、Kruskal
2、Prim
这里只挂第一种,因为noip掌握第一种就够了。
两种做法的区别可以参考这个博客:http://blog.csdn.net/mollnn/article/details/52589741
人人都说prim简单kruskal难..但我怎么就只会kruskal呢..
下面搬个题吧:
Bessie 计划调查N ( <= N <= ,)个农场的干草情况,它从1号农场出发。 农场之间总共有M ( <= M <= ,)条双向道路,所有道路的总长度不超过1,,,。有些农场之间存在着多条道路,所有的农场之间都是连通的。 Bessie希望计算出该图中最小生成树中的最长边的长度。
输入格式:两个整数N和M。
接下来M行,每行三个用空格隔开的整数A_i, B_i和L_i,表示A_i和 B_i之间有一条道路长度为L_i。
输出格式:一个整数,表示最小生成树中的最长边的长度。 输入样例:
3 3
1 2 23
2 3 1000
1 3 43
输出样例:
43
很容易就能看出来是最小生成树的问题。
Kruskal
维护一个并查集,并按照最短路进行加入数集。
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct node{
int start,end,value;
}a[];
int cmp(node x,node y){
return x.value<y.value;
}
int n,m,f[],ans;
int cha(int x){
if(f[x]!=x){
return cha(f[x]);
}return f[x];
}
int bing(int x,int y){
x=cha(x);
y=cha(y);
if(x!=y){
f[x]=y;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
f[i]=i;
}
int r,b,q;
for(int i=;i<=m;i++){
scanf("%d%d%d",&r,&b,&q);
a[i].start=r;
a[i].end=b;
a[i].value=q;
}
sort(a+,a++m,cmp);
for(int i=;i<=m;i++){
int xxx=cha(a[i].start);
int yyy=cha(a[i].end);
if(xxx!=yyy){
ans=fmax(ans,a[i].value);
bing(a[i].start,a[i].end);
}
}
printf("%d",ans);
return ;
}
[板子]Kruskal的更多相关文章
- 并查集板子+kruskal
最近在学最小生成树得时候又用到了并查集,一起来整理一下 1.并查集 并查集就是字面意思,将两个单独得集合合并成一个大的集合. 并查集关键在于两个操作:合并和查找 先要完成查找操作(合并操作在查找的基础 ...
- 【BZOJ-3545&3551】Peaks&加强版 Kruskal重构树 + 主席树 + DFS序 + 倍增
3545: [ONTAK2010]Peaks Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1202 Solved: 321[Submit][Sta ...
- 自用最小生成树模板(基于Kruskal)
200ms的板子,我尽力了,以我自己的能力没法再快了... 基于Kruskal的做法,跑了200ms,以我自己的能力没办法再快了,不过翻了几页评测列表发现我是最快的...我觉得应该会有更快的方法.想法 ...
- 最小生成树——Prim算法和Kruskal算法
洛谷P3366 最小生成树板子题 这篇博客介绍两个算法:Prim算法和Kruskal算法,两个算法各有优劣 一般来说当图比较稀疏的时候,Kruskal算法比较快 而当图很密集,Prim算法就大显身手了 ...
- 货车运输-洛谷-1967-LCA+最大生成树(kruskal(并查集))
传送门 一道:LCA+最大生成树 个人认为把这两个的板子写好(并熟练掌握了之后)就没什么难的 (但我还是de了好久bug)qwq 最大生成树:其实就是最小生成树的变形 我用的是kruskal (个人觉 ...
- [NOI2018]归程 kruskal重构树
[NOI2018]归程 LG传送门 kruskal重构树模板题. 另一篇文章里有关于kruskal重构树更详细的介绍和更板子的题目. 题意懒得说了,这题的关键在于快速找出从查询的点出发能到达的点(即经 ...
- bzoj 3545: [ONTAK2010]Peaks Kruskal重构树
题目: 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经 ...
- NOIP2018赛前停课集训记——最后的刷板子计划
前言 再过两天就\(NOIP2018\)了. 于是,我决定不做其他题目,开始一心一意刷板子了. 这篇博客记录的就是我的刷板子计划. [洛谷3383][模板]线性筛素数 这种普及-的题目我还写挂了两次( ...
- 【一个蒟蒻的挣扎】最小生成树—Kruskal算法
济南集训第五天的东西,这篇可能有点讲不明白提前抱歉(我把笔记忘到别的地方了 最小生成树 概念:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的 ...
随机推荐
- ABP 重写主键ID 多表查询ID无效
1.重写ID [Column("数据库指定的ID")] [Column("CarTypeID")] public override int Id { get; ...
- HTML之CSS标签
1.CSS选择器 1).id选择器 2).class选择器 3).标签选择器 4).层级选择器(空格) (1)id层级选择器 (2)class层级选择器 5).组合选择器(逗 ...
- Kubernetes1.3新特性:rktnetes
(一) 背景资料 对于Kubernetes来说,从架构设计上就是支持Docker和CoreOS rkt两种容器的,在1.2版本中,最低支持CoreOS rkt 0.13.0版本,这个rkt版本算是一 ...
- RedHat6.2离线安装vncserver
准备安装包 tigervnc-server-1.1.0-5.el6_4.1.x86_64.rpm pixman-0.32.8-1.el6.x86_64.rpm pixman-devel-0.32.8- ...
- FastAdmin 开发第 4 天:初试命令行
FastAdmin 最强大的是命令行 先从 test 表开始. 在 FastAdmin 默认有一个 test 表格,用于命令行 crud 测试. 如何开始? 只需要在项目命令行中输入以下命令就会自动生 ...
- 2019-11-1-asp-dotnet-core-简单开发P2P中央服务器
title author date CreateTime categories asp dotnet core 简单开发P2P中央服务器 lindexi 2019-11-01 19:40:33 +08 ...
- Java练习 SDUT-1117_求绝对值(选择结构)
C语言实验--求绝对值(选择结构) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 从键盘上输入任意一个整数,然后输出它 ...
- HDU-2859_Phalanx
Phalanx Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Java练习 SDUT-1230_平方和与立方和
平方和与立方和 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇 ...
- @atcoder - AGC034E@ Complete Compress
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N 个点的树,编号为 1, 2, ..., N.第 i ...