洛谷P1111修复公路并查集改
看了他们的题解感觉很震惊,为什么要用kruskal,这题要用到最小生成树吗???
38行短短的程序就可以了,我觉得学习不是一种套用,套自己学的,而且题解很大一部分都是kruskal。
个人认为自己的程序比他们快。
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,z;
}q[];
int fa[],num[];
int n,m;
bool f;
int w_comp(const node a,const node b){
return a.z<b.z;
}
int get(int x){
if (x==fa[x]) return x;
return fa[x]=get(fa[x]);
}
void add(int x,int y){
fa[get(y)]=get(x);
}
int main(){
cin>>n>>m;
f=false;
for (int i=;i<=n;i++) {
fa[i]=i;
num[i]=;//初始化,每一个集合中都有一个元素,就是它自己
}
for (int i=;i<=m;i++)
cin>>q[i].x>>q[i].y>>q[i].z;
sort(q+,q+m+,w_comp);//排序,结构体的排序在第一篇blog中已经讲到。由于只要联通了就可以不用再找,所以我们从时间少的开始加上边
for (int i=;i<=m;i++){
if (get(q[i].x)!=get(q[i].y)){//如果在一个集合再加就没有必要了,因为之前肯定加了一次,不然不会在一个集合
num[get(q[i].x)]+=num[get(q[i].y)];
num[get(q[i].y)]=;//其实这边用了get5次,记录一下的话只要3次时间复杂度又降了些许
}
if (num[get(q[i].x)]==n){cout<<q[i].z;return ;}
add(q[i].x,q[i].y);//并查集部分需要的可以看我之前的blog
}
cout<<-<<endl;
}
这道题的关键之处就在于如何记录你的集合的元素。经过思考我发现在主程序中增加是很好的一种选择。
洛谷P1111修复公路并查集改的更多相关文章
- 洛谷 - P1111 - 修复公路 - 并查集
https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会 ...
- 洛谷 P1111 修复公路——并查集
先上一波链接qwq https://www.luogu.org/problem/P1111 这题就是裸的并查集咯qwq 维护一下连通块的数目 数目变为一的时候整个图就连通了 输出此时的答案就okay拉 ...
- 洛谷 P1111 修复公路 Label:并查集
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
- 洛谷P1111 修复公路
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
- 洛谷——P1111修复公路(并查集)
题目背景 AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数NN,和公路数MM,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你 ...
- 洛谷 P1111 修复公路
题目链接 https://www.luogu.org/problemnew/show/P1111 以后只发题目链接!!! 题目大意 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连 ...
- 洛谷 P1111 修复公路(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1111 这道题的关键是读懂题: 首先根据题中的一些扎眼的字眼我们可以判断这是一道用最小生成树来做的题 ...
- bzoj3673 & bzoj3674 & 洛谷P3402 可持久化并查集
题目:bzoj3673:https://www.lydsy.com/JudgeOnline/problem.php?id=3673 bzoj3674:https://www.lydsy.com/Jud ...
- 洛谷 3295 [SCOI2016]萌萌哒——并查集优化连边
题目:https://www.luogu.org/problemnew/show/P3295 当要连的边形如 “一段区间内都是 i 向 i+L 连边” 的时候,用并查集优化连边. 在连边的时候,如果要 ...
随机推荐
- echart与Accelerometer综合
首先是x,y,z轴的加速度统计,利用四个数组记录,并长度为偶数时生成图表 var x=[]; var y=[]; var z=[]; var t=[]; document.addEventListen ...
- spark_20180328
// 2.1 条件表达式val x = 2val s = if (x > 0) 1 else -1if (x > 0) "positive" else -1// 返回值 ...
- redmine迁移
(redmine使用的是bitnamiredmine一键安装,环境为apache+mysql+php) 在新环境中一键安装bitnamiredmine,安装完后,执行下面操作 1.备份原环境数据库,恢 ...
- SVN服务器地址更换方法
由于工作需要,已将SVN服务器从172.16.8.xxx上迁移至172.16.8.yyy上,SVN地址变为:https://172.16.8.yyy:8443/svn,原下载到客户端电脑的svn不需要 ...
- 16-----client、offset、scroll 系列
1.client 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- Mysql与Sql server,Sum函数跟Count函数
两者均是统计类函数,都不计算NULL字段!!! 单纯计算行数的话,count的效率比sum的效率高 MySQL SUM()函数介绍 SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下 ...
- string去空格方法
String str = " asd "; String ntr = ("A" + str).trim().substring(1);//将头部加一个字符再用t ...
- htaccess转换httpd.ini方法及案例参考
案例1:httpd.ini适合IIS使用,.htaccess适合Apache使用,nginx.conf适合Nginx使用 转换前:httpd.ini [ISAPI_Rewrite] # 3600 = ...
- 浅谈堆-Heap(一)
应用场景和前置知识复习 堆排序 排序我们都很熟悉,如冒泡排序.选择排序.希尔排序.归并排序.快速排序等,其实堆也可以用来排序,严格来说这里所说的堆是一种数据结构,排序只是它的应用场景之一 Top N的 ...
- Asp.net中的ViewState用法
Session,ViewState用法基本理论:session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控 ...