最小生成树——洛谷并查集、口袋的天空
最小生成树——并查集
简单模板题-洛谷3367并查集
题目描述
如题,现在有一个并查集,你需要完成合并和查询操作。
输入格式
第一行包含两个整数 N,MN,M ,表示共有 NN 个元素和 MM 个操作。
接下来 MM 行,每行包含三个整数 Z_i,X_i,Y_iZ**i,X**i,Y**i 。
当 Z_i=1Z**i=1 时,将 X_iX**i 与 Y_iY**i 所在的集合合并。
当 Z_i=2Z**i=2 时,输出 X_iX**i 与 Y_iY**i 是否在同一集合内,是的输出 Y
;否则输出 N
。
输出格式
对于每一个 Z_i=2Z**i=2 的操作,都有一行输出,每行包含一个大写字母,为 Y
或者 N
。
输入输出样例
输入 #1复制
4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4
输出 #1复制
N
Y
N
Y
说明/提示
对于 30%30% 的数据,N \le 10N≤10,M \le 20M≤20。
对于 70%70% 的数据,N \le 100N≤100,M \le 10^3M≤103。
对于 100%100% 的数据,1\le N \le 10^41≤N≤104,1\le M \le 2\times 10^51≤M≤2×105,1 \le X_i, Y_i \le N1≤X**i,Y**i≤N,Z_i \in { 1, 2 }Z**i∈{1,2}。
#include <bits/stdc++.h>
using namespace std;
int n,m,z,x,y;
int father[10005];
int find(int point)
{if(father[point]==point)return point;return father[point]=find(father[point]);
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)father[i]=i;for(int i=0;i<m;i++){cin>>z>>x>>y;x=find(x);y=find(y);if(z==1){if(x!=y)father[x]=y;}else {if(x==y)cout<<"Y\n";elsecout<<"N\n";}}return 0;
}
进阶一点点的并查集的题,洛谷——口袋的天空
题目背景
小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。
有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。
题目描述
给你云朵的个数 NN,再给你 MM 个关系,表示哪些云朵可以连在一起。
现在小杉要把所有云朵连成 KK 个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。
输入格式
第一行有三个数 N,M,KN,M,K。
接下来 MM 行每行三个数 X,Y,LX,Y,L,表示XX云和 YY 云可以通过 LL 的代价连在一起。
输出格式
对每组数据输出一行,仅有一个整数,表示最小的代价。
如果怎么连都连不出 KK 个棉花糖,请输出 No Answer
。
输入输出样例
输入 #1复制
3 1 2
1 2 1
输出 #1复制
1
说明/提示
对于 30%30% 的数据,N \le 100N≤100,M \le 10^3M≤103;
对于 100%100% 的数据,1 \le N \le 10^31≤N≤103,1 \le M \le 10^41≤M≤104,1 \le K \le 101≤K≤10,1 \le X,Y \le N1≤X,Y≤N,0 \le L<10^40≤L<104。
#include <bits/stdc++.h>
using namespace std;
int n,m,k,l,x,y;
int father[10005];
int now=0,need=0;//记录合并了多少次,需要合并多少次
int all=0;//记录最小生成树各边之和
struct edge{int from,to,wage;
};
edge e[10005];
bool cmp(edge a,edge b)
{return a.wage<b.wage;
}
int find(int point)
{if(father[point]==point)return point;return father[point]=find(father[point]);
}
int main()
{cin>>n>>m>>k;need=n-k;for(int i=1;i<=n;i++)father[i]=i;for(int i=1;i<=m;i++){cin>>e[i].from>>e[i].to>>e[i].wage ;}sort(e+1,e+m+1,cmp);for(int i=1;i<=m;++i){x=find(e[i].from);y=find(e[i].to );if(x!=y)father[x]=y,++now,all+=e[i].wage ;if(now==need){cout<<all;return 0;}}cout<<"No,Answer";return 0;
}
最小生成树——洛谷并查集、口袋的天空相关推荐
- 最小生成树KrusKal算法(并查集)
洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...
- 最小生成树 洛谷P3366【模板】最小生成树 洛谷P2820 局域网
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- 最小生成树Kruskal算法+并查集检查连通
/* 10 6 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 */// 本例解决最小生成树问题 // 并查集来加快效率 // ...
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...
- 【XSY2485】MST(最小生成树+倍增lca+并查集)
题面 Description 给定一个nnn个点mmm条边的连通图,保证没有自环和重边.对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成树上.假如最大权值为 ...
- 洛谷P2412 查单词 [trie树 RMQ]
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...
- 【C语言】刷题计划第一期——洛谷编程题目集
如果你已经掌握了一些C语言的基本语法,想练习自己写代码的能力,建议大家可以看一下博主整理题目,从入门到进阶都有.每个阶段需要的技能会有差异,大家要补充对应的基础知识.一起加油,那么一键三连我们开始发车 ...
- 擒贼先擒王——并查集
写一篇并查集的总文,详细介绍什么是并查集?思想是怎样的?怎么写出代码?如何对应题目? 1.什么是并查集 并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题.它管理一系 ...
最新文章
- Backbone学习日记[1]:感性认识
- 15个产业级算法推出、35个高精度预训练模型上线!最强国产开源AI框架再进化,密集提升视觉产业实战能力...
- Cortex - M3 位带别名首地址的计算方法
- 整理blog,回味过去的点滴
- [数论]Gcd/ExGcd欧几里得学习笔记
- linux 手动安装 oracle(转)
- ios定位权限plist_iOS-info.plist 中添加定位权限
- 求最大公约数----辗转相除法
- execution 排除_使用SQL Server 2016 Live Execution统计信息对SQL查询性能进行故障排除
- 利用神经网络内部表征可视化class-specific image regions区域
- Rust : CSV库的用法
- Java购物车前端代码_JavaWeb后台购物车类实现代码详解
- win2000/xp/2003 错误代码
- CAD插件学习系列教程(二) 燕秀工具箱的使用
- Livezilla on Linux 安装配置教程
- HCL华三模拟器静态路由实验
- java 且 或 符号_Java 、、|、||、^、、、~、等运算符
- js的json php无法json_decode,PHP中遇到BOM、 编码导致json_decode函数无法解析问题
- 牛客网SQL大厂面试真题(一)
- 《Solar Energy》期刊介绍(SCI 2区)