当前位置: 首页 > news >正文

ACM-大一训练第三周(Floyd算法+并查集算法专题训练)

🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.CSDN
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:ACM周训练题目合集.CSDN
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐

文章目录

  • A - 电车
  • B - 并查集
  • C - 最短路
  • D - 修复公路
  • E - 青蛙
  • F - 炸铁路
  • G - DZY热爱化学
  • H - 合根植物
  • 总结


在这里插入图片描述

A - 电车

洛谷:P1346 电车
在这里插入图片描述
解题思路:Floyd算法的运用,这里大致讲解一下题目,从第二行开始就是第一个车道 接着就是开关思想,也就是01思想,这里对于电路,或者种树是否这些题目都是一个经验,对于这个题目后面也会对Floyd算法做一个总结

#include<iostream>
#include<cmath>
#include<cstring>using namespace std;#define N  0x3f3f3f3f //一个特别大的数字,记住这个知识点
int n,a,b,m,x,f[1001][1001];int main()
{memset(f,N,sizeof f);//初始化cin>>n>>a>>b;for(int i=1;i<=n;i++)//初始化---自己到自己是0{f[i][i]=0;}for(int i=1;i<=n;i++)//n条道路所以 for循环0-n{cin>>m;//组的变向与不变向for(int j=1;j<=m;j++){cin>>x;if(j==1){f[i][x]=0;//第一个必须设置为0,表示不变向}else {f[i][x]=1;//表示变向的情况}}}//标准的Floyd算法模板for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=j || i!=k || j!=k){f[i][j]=min(f[i][k]+f[k][j],f[i][j]);}}}}//输出if(f[a][b]==N) cout<<"-1"<<endl;else cout<<f[a][b]<<endl;return 0;
}

B - 并查集

AcWing—836. 合并集合
在这里插入图片描述
解题思路:并查集的模板题目,这里不多赘述。

#include<iostream>using namespace std;const int N=100010;int p[N];
int n,m;int find(int x) //目的:找到父节点 并且返回+路径压缩
{if(p[x]!=x) p[x]=find(p[x]);return p[x];
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) p[i]=i; //开始只有自己一个元素一个集合while(m--){char op[2];int a,b;scanf("%s%d%d",&op,&a,&b);if(op[0]=='M') p[find(a)]=find(b);else{if(find(a) == find(b)) puts("Yes");else puts("No");}}return 0;
}

C - 最短路

在这里插入图片描述
题目来自计蒜客,不过我不知道在哪里找到这个题目,大家下去自己去试一试

解题思路:基础Floyd算法,这个更加模板

#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;int n,m;
int u,v,w;
int g[110][110];
int path[110][110];
const int maxx=99999999;
int main()
{cin>>n>>m;again:for(int i=1;i<=n;i++)//初始化{for(int j=1;j<=n;j++){if(i==j) g[i][j]=0;else g[i][j]=maxx;}}for(int i=1;i<=m;i++)//链接道路{cin>>u>>v>>w;g[u][v]=g[v][u]=w;}for(int k=1;k<=n;k++)//Floyd算法模板{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(g[i][j]>g[i][k]+g[k][j]){g[i][j]=g[i][k]+g[k][j];}}}}printf("%d\n",g[1][n]);//根据题意打印答案cin>>n>>m;if(n==0&&m==0) return 0;else goto again;return 0;
}

D - 修复公路

洛谷:P1111 修复公路
在这里插入图片描述
解题思路:并查集思路,不过运用到了结构体的基础知识,模板基础上加一些东西罢了。

#include<iostream>
#include<algorithm>using namespace std;struct node
{int x,y,t;
}a[100010];int n,m,p[100010];int cmp(node a,node b)//按照t进行排序
{return a.t<b.t;
}int find(int x)//并查集算法模板
{return p[x]==x?x:(p[x]=find(p[x]));
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].t);sort(a+1,a+m+1,cmp);for(int i=1;i<=n;i++) p[i]=i;for(int i=1;i<=m;i++){int px=find(a[i].x);int py=find(a[i].y);if(px!=py) p[px]=py,n--;if(n==1) {cout<<a[i].t;return 0;}}cout<<"-1"<<endl;return 0;
}

E - 青蛙

在这里插入图片描述

#include<iostream>
#include<cmath>
#include<cstring>using namespace std;#define inf 0x3f3f3f3fint x[300],y[300],n;
double g[300][300];int main()
{int q=1;while(cin>>n&&n){memset(g,inf,sizeof(g));for(int i=1;i<=n;i++){cin>>x[i]>>y[i];}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){g[i][j]=g[j][i]=sqrt(double(x[i]-x[j])*(x[i]-x[j])+double(y[i]-y[j])*(y[i]-y[j]));}}for(int k=1; k<=n; k++)for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)g[i][j]=min(g[i][j],max(g[i][k],g[k][j]));printf("Scenario #%d\nFrog Distance = %.3lf\n\n",q++,g[1][2]);}
}

F - 炸铁路

P1656 炸铁路
在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>using namespace std;#define inf ox3f3f3f3f
int n,m,f[151],b[151];
struct City
{int a,b;
}p[5010];int find(int x)
{if(f[x]==x) return x;else return f[x]=find(f[x]);
}bool cmp(City x,City y)
{if(x.a==y.a) return x.b<y.b;return x.a<y.a;
}void he(int x,int y)
{int x1=find(x),y1=find(y);f[y1]=f[x1];
}int main()
{cin>>n>>m;for(int i=1;i<=m;i++){cin>>p[i].a>>p[i].b;if(p[i].a>p[i].b){int t=p[i].a;p[i].a=p[i].b;p[i].b=t;}}sort(p+1,p+m+1,cmp);for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){f[j]=j;}for(int j=1;j<=m;j++){if(j!=i){he(p[j].a,p[j].b);}}for(int j=2;j<=n;j++){if(f[find(j)]!=f[find(j-1)]){cout<<p[i].a<<" "<<p[i].b<<endl;break;}}}return 0;
}

G - DZY热爱化学

题目来自cf,具体我这里不链接了。
在这里插入图片描述
解题思路:并查集思路,模板基础上加一些东西罢了。

#include<iostream>
#include<cmath>using namespace std;typedef long long ll;
const int N=100010;
int p[N];
int n,m;int find(int x)
{return p[x]==x?x:(p[x]=find(p[x]));
}int main()
{cin>>n>>m;for(int i=1;i<=n;i++) p[i]=i;if(m==0){printf("1");return 0;}while(m--){int a,b;cin>>a>>b;a=find(a);b=find(b);if(a!=b){p[a]=b;}}ll ans=0,cnt=0;for(int i=1;i<=n;i++){if(find(i)!=i){++ans;}}ll c=pow(2,ans);printf("%lld\n",c);return 0;
}

H - 合根植物

P8654 [蓝桥杯 2017 国 C] 合根植物
在这里插入图片描述
解题思路:并查集思路,模板基础上加一些东西罢了。

#include<iostream>
#include<cmath>using namespace std;int n,m,k;
int p[100000010];int find(int x)
{return p[x]==x?x:(p[x]=find(p[x]));
}int main()
{cin>>n>>m>>k;int res=n*m;for(int i=1;i<=res;i++) p[i]=i;int ans=0;while(k--){int a,b;cin>>a>>b;a=find(a);b=find(b);if(a!=b){p[a]=b;}}for(int i=1;i<=res-1;i++){if(find(i)!=find(i+1)){ans++;p[find(i)]=find(i+1);}}cout<<ans+1<<endl;return 0;
}

总结

并查集:
做题思路:你会发现,你只需要输入操作+合并也就是find函数
再进行for循环遍历一遍就可以得到答案,不信你可以看看我写
的那些题目的共同特点真的非常相似,或许因为初学的缘故真的会发现
非常简单,因为就是这样用的

Floyd算法:

初始化+三层for循环+输出基本就是这个算法的模板,但是最困难的是建图的过程,这个需要特别训练

相关文章:

ACM-大一训练第三周(Floyd算法+并查集算法专题训练)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…...

taobao.item.sku.update( 更新SKU信息 )

&#xffe5;开放平台免费API必须用户授权 *更新一个sku的数据 *需要更新的sku通过属性properties进行匹配查找 *商品的数量和价格必须大于等于0 *sku记录会更新到指定的num_iid对应的商品中 *num_iid对应的商品必须属于当前的会话用户 公共参数 请求地址: HTTP地址 http://gw.…...

ros2创建一个工程

第一步&#xff1a;创建src目录 $ mkdir ros2-demo $ cd ros2-demo/ $ mkdir src $ cd src/第二步&#xff1a;创建功能包cd src$ ros2 pkg create --build-type ament_cmake ros2_demo --dependencies rclcpp std_msgsros2 pkg create --build-type ament_python learning_pkg…...

【力扣】stack容器的探索之有效的括号

作者&#xff1a;狮子也疯狂 专栏&#xff1a;《算法详解》 愿你生如夏花之绚烂&#xff0c;幸运永远与你相伴&#xff0c;疯狂常在。 目录一. &#x1f981; Stack容器的来历1.1 操作栈的方法二. &#x1f981; Stack的使用2.1 题目2.2 分析2.3 详细算法实现2.4 力扣AC截图三…...

【Elsevier出版社】中科院2区,SCIEEI 双检,已有发表案例,3个月左右录用

1区智能传感器类SCIE&EI 【期刊简介】IF&#xff1a;5.0-6.0&#xff0c;JCR1区&#xff0c;中科院2区&#xff0c;SCI&EI 双检&#xff0c;正刊 【参考周期】3个月左右录用 【截稿日期】2023.5.30 【征稿领域】有关人工智能与传感器的相关研究均可 包括但不限于&#…...

基于明道云平台重建医院管理流程

一、龙华区医疗信息化建设情况 首先&#xff0c;给大家介绍一下龙华区医疗信息化建设的情况&#xff0c;龙华区位于深圳市的中部&#xff0c;目前下属3家公立医院&#xff0c;2家公共卫生机构。2017年&#xff0c;龙华区提出了建设智慧龙华总体框架方案&#xff0c;龙华区卫生…...

【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…...

ChatGPT API 低价上线,开发者可以人手一个了?

千呼万唤&#xff0c;ChatGPT API来了&#xff01; 不仅首发&#xff0c;价格居然还有惊喜&#xff0c;0.002美元/每1000 token&#xff0c;并将价格降低90%&#xff0c;直接打了1折。OpenAI官方还表示&#xff0c;gpt-3.5-turbo目前的版本代号是gpt-3.5-turbo-0301&#xff0…...

品牌营销策略 | 科学经营合作伙伴关系的5个要素

在管理众多的合作伙伴项目时&#xff0c;企业会遇到很多的问题&#xff0c;比如&#xff0c;数据信息分散凌乱、手动操作繁琐重复和处理环节粗放等。这将耗费公司大量的人力物力&#xff0c;严重影响大数据的综合分析和利用。因此&#xff0c;企业要科学管理好企业的合作伙伴关…...

【剑指offer-C++】JZ20:表示数值的字符串

【剑指offer-C】JZ20&#xff1a;表示数值的字符串题目描述解题思路题目描述 描述&#xff1a;请实现一个函数用来判断字符串str是否表示数值&#xff08;包括科学计数法的数字&#xff0c;小数和整数&#xff09;。 科学计数法的数字(按顺序&#xff09;可以分成以下几个部分…...

【NLP相关】深度学习领域不同编程IDE对比

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

定制ubuntu的docker镜像

ssh登录jdkmavenvimpingcurlFROM ubuntu:22.04RUN apt-get updateRUN apt-get install -y \vim \inetutils-ping \openssh-server \curl \openjdk-8-jdk \mavenRUN mkdir /var/run/sshdRUN echo root:root |chpasswdRUN sed -ri s/^#?PermitRootLogin\s.*/PermitRootLogin yes…...

我的 System Verilog 学习记录(8)

引言 本文简单介绍 SystemVerilog 的接口。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; 我的 System Verilog 学习记录&#xff08;3&#xff09; 我的 System Verilog 学习记…...

详解JAVA字节码

目录 1.概述 2.字节码文件构成 2.1.魔数 2.2.版本号 2.3.常量池 2.4.访问标志 2.5.索引 2.6.字段表 2.7.方法表 3.字节码指令 3.1.概述 3.2.指令分类 3.2.1.加载存储指令 3.2.2.运算指令 3.2.3.其他指令 3.3.完整指令工作流程 4.字节码保护 1.概述 以往的编程…...

前端利用emailjs发送邮件

最近有一个需求&#xff0c;前端发送一个form表单到一个邮箱&#xff0c;找了一圈发现emailjs还不错就使用他了。首先emailjs官网注册一个账号注册完之后创建一个邮件服务&#xff08;我这里使用的是谷歌邮箱&#xff09;链接谷歌邮箱账户 然后创建服务接下来就要创建一个邮件的…...

16 Nacos服务端服务注册源码分析

Nacos服务端服务注册源码分析 服务端调用接口 我们已经知道客户端在注册服务的时候实际上是调用的NamingService.registerInstance这个方法来完成实例的注册&#xff0c;而且在最后我们也告诉了大家实际上从本质上讲服务注册就是调用的对应接口nacos/v1/ns/instance&#xff…...

Spring Boot2中如何优雅地个性化定制Jackson

概述 本文的编写初衷&#xff0c;是想了解一下Spring Boot2中&#xff0c;具体是怎么序列化和反序列化JSR 310日期时间体系的&#xff0c;Spring MVC应用场景有如下两个&#xff1a; 使用RequestBody来获取JSON参数并封装成实体对象&#xff1b;使用ResponseBody来把返回给前…...

2023年全国最新食品安全管理员精选真题及答案11

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 101.婴幼儿配方乳粉的产品配方应当经&#xff08;&#xff09;部门注册。…...

【脚本】用于得到某个文件/文件夹所有文件的存储大小(MB单位)

知识点 来自在线转换换算网页&#xff1a;在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算 电脑中存储常用的单位&#xff1a; 1Byte(Byte 字节) 8Bit 1KB (Kilobyte 千字节) 1024Byte 1MB (Megabyte&#xff0c;兆字节&#xff0c;简称“兆”) 1024KB 1GB (Gigabyte&am…...

19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)

项目要点 Fashion-MNIST总共有十个类别的图像。代码运行位置 CPU: cputf.config.set_visible_devices(tf.config.list_physical_devices("CPU"))fashion_mnist keras.datasets.fashion_mnist # fashion_mnist 数据导入训练数据和测试数据拆分: x_valid, x_train…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...