2024/1/20 并查集

目录

并查集关键代码

亲戚

村村通

团伙(新知识)


并查集关键代码

返回祖宗节点+路径压缩:

int find(int x)
{
    if(f[x]!=x) f[x]=find(f[x]);
    return f[x];
}

合并:

void make(int x,int y)
{
    int f1=find(f[x]);
    int f2=find(f[y]);
    if(f1!=f2)
    {
        f[f1]=f2;
    }
}

亲戚

P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:这道题用并查集,首先输入数据,进行初始化。

如果是亲戚,就合并他们(make(int x,int y))

最后判断输入的两个数据是否返回同一个祖宗节点,如果是,则输出YES;反之输出NO。

完整代码

#include <bits/stdc++.h>
int n,m,p;
const int N = 5050;
int f[N];
int find(int x)
{
    if(f[x]!=x) f[x]=find(f[x]);
    return f[x];
}
void make(int x,int y)
{
    int f1=find(f[x]);
    int f2=find(f[y]);
    if(f1!=f2)
    {
        f[f1]=f2;
    }
}
int main()
{
    std::cin >> n >> m >> p;
    for(int i = 1;i <= n;i ++)
    {
        f[i]=i;
    }
    while(m --)
    {
        int x,y;
        std::cin >> x >> y;
        make(x,y);
    }
    while(p --)
    {
        int x,y;
        std::cin >> x >> y;
        int x1=find(x);
        int y1=find(y);
        if(x1==y1)
        {
            std::cout<<"Yes\n";
        }
        else
            std::cout<<"No\n";
    }
    return 0;
}

村村通

P1536 村村通 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:这道题用并查集,两个村庄之间每修一条路,需要修的路的条数就减少一条,最后输出还需要修的道路条数。

常识:有n个村庄,那么需要修的道路条数为n-1。

错误代码:

void make(int x,int y)
{
    int f1=find(x);
    int f2=find(y);
    if(f1!=f2)
    {
        p[f1]=f2;
    }
    ans--;
}

 

ans--不应该在外面,要在if里面

如果他们祖宗节点不一样才要减一,意味着这两个村庄连接需要修一条路,一样的话就表示可以联通,答案就不用相减了

AC代码:

#include <bits/stdc++.h>
const int N = 1010;
int p[N];
int ans;
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
void make(int x,int y)
{
    int f1=find(x);
    int f2=find(y);
    if(f1!=f2)
    {
        p[f1]=f2;
        ans--;
    }
}
int main()
{
    int n,m;
    while(std::cin >> n >> m)
    {
        if(n==0)
        {
            return 0;
        }
        ans=n-1;
        for(int i = 1;i <= n;i ++)
        {
            p[i]=i;
        }
        for(int i = 1;i <= m;i ++)
        {
            int x,y;
            std::cin >> x >> y;
            find(x);
            find(y);
            make(x,y);
        }
        std::cout<<ans<<"\n";
    }
    return 0;
}

团伙(新知识)

P1892 [BOI2003] 团伙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:并查集+反集

关于反集

完整代码

#include <bits/stdc++.h>
const int N = 5050*2;
int f[N];
int ans;
int find(int x)
{
    if(f[x]!=x) f[x]=find(f[x]);
    return f[x];
}
void make(int x,int y)
{
    int f1=find(x);
    int f2=find(y);
    if(f1!=f2)
    {
        f[f1]=f2;
    }
}
int main()
{
    int n,m;
    std::cin >> n >> m;
    for(int i = 1;i <= 2*n;i ++)
    {
        f[i]=i;
    }
    for(int i = 1;i <= m;i ++)
    {
        std::string s;
        int p,q;
        std::cin >> s >> p >> q;
        if(s=="F")
        {
            find(p),find(q);
            make(p,q);
        }
        else if(s=="E")
        {
            find(p+n),find(q);//反集合合并
            make(p+n,q);
            find(q+n),find(p);
            make(q+n,p);
        }
    }
    for(int i = 1;i <= n;i ++)
    {
        if(f[i]==i)
            ans++;
    }
    std::cout<<ans;
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

69.使用Go标准库compress/gzip压缩数据存入Redis避免BigKey

文章目录 一&#xff1a;简介二&#xff1a;Go标准库compress/gzip包介绍ConstantsVariablestype Headertype Reader 三&#xff1a;代码实践1、压缩与解压工具包2、单元测试3、为何压缩后还要用base64编码 代码地址&#xff1a; https://gitee.com/lymgoforIT/golang-trick/t…

图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 deeplab系列算法概述 deeplabV3 VOC分割实战1 deeplabV3 VOC分割实战2 deeplabV3 VOC分割实战3 dee…

C#中chart控件

C#中chart控件 图表的5大集合 例子 第一步&#xff1a;创建工程 放入chart控件 series集合 选择图标类型 选择绘制曲线的宽度和颜色。 显示数据标签 Title集合 添加标题 调整标题字体&#xff1a;大小和颜色 CharsArea集合 对坐标轴进行说明 设置间隔 设置刻度…

使用Ultimate-SD-Upscale进行图片高清放大

之前我们介绍过StableSR进行图片高清放大&#xff0c;如果调的参数过大&#xff0c;就会出现内存不足的情况&#xff0c;今天我们介绍另外一个进行图片高清放大的神器Ultimate-SD-Upscale&#xff0c;他可以使用较小的内存对图像进行高清放大。下面我们来看看如何使用进行操作。…

Spark读取kafka(流式和批数据)

spark读取kafka&#xff08;批数据处理&#xff09; # 按照偏移量读取kafka数据 from pyspark.sql import SparkSessionss SparkSession.builder.getOrCreate()# spark读取kafka options {# 写kafka配置信息# 指定kafka的连接的broker服务节点信息kafka.bootstrap.servers: n…

无法访问云服务器上部署的Docker容器

说明&#xff1a;记录一次无法访问云服务器上部署的Docker容器的问题。 问题描述 某次&#xff0c;我在云服务器上&#xff0c;使用Docker运行了一个Nginx容器&#xff0c;用公网IP怎么也访问不到。这种情况博主也算有经验&#xff0c;可以从以下几个方面去排查&#xff1a; …

舵机使用总结

文章目录 1 舵机简介2 注意事项3 编写驱动程序3.1 使用STM32作为控制器3.1.1 计算高电平对应程序中的取值范围3.1.2 编写控制程序 1 舵机简介 舵机使用PWM控制&#xff0c;周期为20ms&#xff0c;通过改变高电平占空比来驱动&#xff0c;高电平通常为1~2ms&#xff08; 或 0.5 …

RabbitMQ系列之入门级

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《RabbitMQ系列之入门级》。&#x1f3af;&#x…

YOLOv8全网首发:新一代高效可形变卷积DCNv4如何做二次创新?高效结合SPPF

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,与YOLOv8 SPPF高效结合 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适合paper !!! 💡💡💡…

AOI与AVI:在视觉检测中的不同点和相似点

AOI&#xff08;关注区域&#xff09;和AVI&#xff08;视觉感兴趣区域&#xff09;是视觉检测中常用的两个概念&#xff0c;主要用于识别和分析图像或视频中的特定区域。虽然这两个概念都涉及到注视行为和注意力分配&#xff0c;但它们在定义和实际应用等方面有一些差异。 AOI…

x86-x64汇编语言、反汇编知识和IDA

x86-x64汇编语言 基础知识 x86寄存器&#xff1a; 通用寄存器&#xff1a;EAX, EBX, ECX, EDX, ESI, EDI 栈顶指针寄存器&#xff1a;ESP 栈底指针寄存器&#xff1a;EBP 指令计数器&#xff1a;EIP 段寄存器&#xff1a;CS, DS, ES, FS, GS, SS x86-64寄存器&#xff1a;&a…

2.【C语言】(函数指针||sizeof||笔试题)

0x01.函数指针 void test(const char* str) {printf("%s\n", str); }int main() {void (*pf)(const char*) test;//pf是函数指针变量void (*pfarr[10])(const char*);//pfarr是存放函数指针的数组void (*(*p)[10])(const char*) &pfarr;//p是指向函数指针数组…

Leetcoder Day10|栈与队列part02(栈的应用)

语言&#xff1a;Java/C 目录 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 今日总结 20. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串&#xff0c;判断字符串是否有效。 有效字…

WEB接口测试之Jmeter接口测试自动化 (三)(数据驱动测试)

接口测试与数据驱动 1简介 数据驱动测试&#xff0c;即是分离测试逻辑与测试数据&#xff0c;通过如excel表格的形式来保存测试数据&#xff0c;用测试脚本读取并执行测试的过程。 2 数据驱动与jmeter接口测试 我们已经简单介绍了接口测试参数录入及测试执行的过程&#xff0…

Unity3D Pico VR 手势识别物体交互 适配 MRTK3

当前Pico已经支持手势识别了&#xff0c;但是提供的PICO Unity Integration SDK 中是没有手势和物体交互的功能&#xff0c;Unity XR Interaction Toolkit提供的手势识别物体交互对 Quest适配的挺好的&#xff0c;Pico 当前只能用指尖点触还不能对物体进行抓握以及手势控制射线…

数据结构一:算法效率分析(时间复杂度和空间复杂度)-重点

在学习具体的数据结构和算法之前&#xff0c;每一位初学者都要掌握一个技能&#xff0c;即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率。所谓算法&#xff0c;即解决问题的方法。同一个问题&#xff0c;使用不同的算法&#xff0c;虽然得到的结果相同&#xff0c;…

开发实践8_project

要求&#xff1a; 使用Restful对Chaos模型作基本操作。 结果&#xff1a; post 3 组数据后&#xff0c;get 查询如下&#xff1a; put修改后get&#xff1a; delete pk3之后get&#xff1a; 代码&#xff1a; python manage.py startapp pro8_app 注册 总路由 // path(pr…

免费200万Tokens 用科大讯飞API调用星火大模型服务

简介 自ChatGPT火了之后&#xff0c;国内的大模型发展如雨后春笋。其中的佼佼者之一就是科大讯飞研发的星火大模型,现在大模型已经更新到V3 版本&#xff0c;而且对开发者也是相当友好&#xff0c;注册就送200万tokens,讯飞1tokens 约等于 1.5 个中文汉字 或者 0.8 个英文单词…

JVM 如何判断一个对象可以被回收

Hi&#xff0c; 我是 浮生。 今天分享一道一线互联网公司必问的面试题。 ”JVM 如何判断一个对象可以被回收“ 关于这个问题&#xff0c;来看看高手的回答。 一、问题解析 在 JVM 里面&#xff0c;要判断一个对象是否可以被回收&#xff0c;最重要的是判断这个对象是否还在被…

中仕教育:省考怎么查每个岗位报考人数?一篇文章带你搞定!

参加省考避开热门岗位能够一定程度上提高上岸几率&#xff0c;怎么看岗位报考人数? 1. 官方公告&#xff1a;每年省考发布招录公告时&#xff0c;会公布各个岗位的招录人数&#xff0c;可以关注招录信息。 2. 查询报名数据&#xff1a;在报名结束后&#xff0c;省考招录机关…