并查集基础,死去的回忆突然攻击我

news2025/4/21 2:59:30

并查集普及【模板】并查集 - 洛谷

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
#define int long long 
typedef pair<int,int> PII;
#define xx first
#define yy second
const int N=1e5+10;
int n,m,w;
int p[N];
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<N;i++){
        p[i]=i;
    }
    while(m--){
        int a,b,op;
        cin>>op;
        cin>>a>>b;
        if(op==1){
            p[find(a)]=find(b);
        }
        else {
            if(find(a)==find(b))puts("Y");
            else puts("N");
        }
    }
}

并查集的运用搭配购买 - 洛谷

问题分析:

这个问题其实是一个背包问题的进阶版,但是因为做题的过程中使用了并查集的算法,所以也归为并查集的进阶,对于这只能够题目来说,咱们只要看到了表示买第 ui​ 朵云就必须买第 vi​ 朵云,同理,如果买第 vi​ 朵就必须买第 ui​ 朵。这种你中带我,我中带你的感觉就是并查集的使用了。

细节就不多说了,以后的文章不会在这种细节大意都知道的地方解说。

代码的实现:

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
#define int long long 
typedef pair<int,int> PII;
#define xx first
#define yy second
const int N=1e5+10;
int p[N];
struct op{
    int c,d;
}f[N];
int find(int x ){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
int n,m,w;
vector<PII> bag;
int dp[N];
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin>>n>>m>>w;
    int res=0;
    for(int i=1;i<N;i++)p[i]=i;
    for(int i=1;i<=n;i++){
        cin>>f[i].c>>f[i].d;
    }
    while(m--){
        int a,b;
        cin>>a>>b;
        p[find(a)]=find(b);
    }   
    for(int i=1;i<=n;i++){
        if(p[i]!=i){
            f[find(i)].c+=f[i].c;
            f[find(i)].d+=f[i].d;
        }
    }
    for(int i=1;i<=n;i++){
        if(p[i]==i)bag.push_back({f[i].c,f[i].d});
    }
    for(auto i:bag){
        for(int j=w;j>=i.first;j--){
            dp[j]=max(dp[j],dp[j-i.first]+i.second);
        }
    }
    cout<<dp[w]<<endl;
}

例题:[NOI2015] 程序自动分析 - 洛谷

代码实现:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <cmath>
#include <vector>
#include <numeric>
#include <unordered_map>
#include <queue>
#include <set>
using namespace std;
typedef pair<int,int> PII;
const int N=5e5+10;
int p[N];
int e,i,j,T,n,idx;
vector<PII> v1,v0;
unordered_map<int,int> mp;
int Get(int x){//这一步是干啥的
    if(!mp.count(x))mp[x]=++idx;
    return mp[x];
}
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
signed main(){
    cin>>T;
    while(T--){
        cin>>n;
        //init
        idx=0;
        for(int i=1;i<N;i++){
            p[i]=i;
        }
        v1.clear();v0.clear();mp.clear();
    while(n--){
        cin>>i>>j>>e;
        i=Get(i);
        j=Get(j);
        if(e==1){
            v1.push_back({i,j});
        }
        else {
            v0.push_back({i,j});
        }
    }
    for(auto it:v1){
        int a=find(it.first);int b=find(it.second);
        if(a!=b)p[a]=b;
    }
    bool flag=true;
    for(auto it:v0){
        int a=find(it.first);int b=find(it.second);
        if(a==b){
            flag=false;
            break;
        }
    }
    if(flag)puts("YES");
    else puts("NO");
   }
}

以上就是有关于并查集的题目啦

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【已解决】c++如何从0配置ffmpeg

本博文源于笔者正在做的任务&#xff0c;将视频mp4每帧转换成jpg格式&#xff0c;前提是需要配置ffmpeg。因此本文从0下载教读者如何配置ffmpeg。 文章目录 1、百度搜索官网2、配置项目3、创建main.cpp测试库与包4、 总结 1、百度搜索官网 官网已经搜索到&#xff0c;我们要找…

ulimit命令

ulimit命令 ulimit 命令用于查看和设置 shell 运行时的资源限制。它可以控制各种资源&#xff0c;如文件打开数量、堆栈大小、CPU 时间等。ulimit 命令通常用于限制 shell 启动的进程的资源使用量&#xff0c;以防止系统资源被耗尽。ulimit命令的主要作用是提高系统的性能和稳…

【C++】类和对象之常引用与运算符重载

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 常引用3. 运算符重载 1. 前言 在之前的文章中提到了常引用&#xff0c;再来看运算符重载之前&#xff0c;先来看看常引用的使用。 2. 常引用 在使用引用的时候可…

西门子WINCC客户端提示“未找到启动画面”

WinCC客户端提示“未找到启动画面”&#xff1f; 在WinCC客户机服务器架构中&#xff0c;多用户客户机互连服务器项目时&#xff0c;有时会弹出“未找到启动画面”的提示对话框&#xff0c;并且选择画面后继续弹出该对话框&#xff0c;无法正常显示画面。 可能的原因有&#x…

DevEco Studio下载与安装(Windows)

下载地址&#xff1a; HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装时直接点击 next 即可。 运⾏已安装的DevEco Studio&#xff0c;⾸次使⽤&#xff0c;请选择Do not import settings&#xff0c;单击OK。 1.安装Node.js 如果本地有下载&#xff0c;可以…

利用观测云实现 Kubernetes 多集群可观测

简介 观测云的工作空间接入多个 Kubernetes 集群时&#xff0c;是如何区分不同集群&#xff0c;达到多集群的可观测性&#xff1f; 增加Tag NAMESPACE&#xff1a;DataKit 选举空间&#xff0c;需要设置 ENV_NAMESPACE 环境变量&#xff0c;值为非空字符&#xff0c;不同集群…

稀疏卷积Sparse Convolution

1. 为什么提出稀疏卷积&#xff1f;它有什么好处&#xff1f; 卷积神经网络已经被证明对于二维图像信号处理是非常有效的。然而&#xff0c;对于三维点云信号&#xff0c;额外的维度显著增加了计算量。 另一方面&#xff0c;与普通图像每个像素都有值不同的是&#xff0c;一般…

从0开始python学习-53.python中flask创建简单接口

目录 1. 创建一个简单的请求,没有写方法时默认为get 2. 创建一个get请求 3. 创建一个post请求&#xff0c;默认可以使用params和表单传参 4. 带有参数的post请求 1. 创建一个简单的请求,没有写方法时默认为get from flask import Flask, request# 初始化一个flask的对象 ap…

细菌,支原体,真菌--细胞培养的最大威胁及解决方法

在科研实验中&#xff0c;微生物污染是细胞培养过程中面临的一项长期的严重威胁。侵入的支原体、细菌、酵母菌和真菌可以直接杀死您宝贵的细胞或者彻底改变培养细胞的特性&#xff0c;导致不准确的实验结果&#xff0c;既耗费时间又浪费资源。InvivoGen/欣博盛生物可以提供多种…

QT Mingw编译ffmpeg源码以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频流时…

Linux系统安装

Linux系统安装 安装包链接 链接&#xff1a;https://pan.baidu.com/s/1FdP7TH90UvKUQuiL2yeGCA 提取码&#xff1a;c49n安装包内容 虚拟机执行文件 详细安装教程 虚拟机密钥 Ubuntu 安装步骤 先点击虚拟机的.EXE文件安装&#xff0c;打开安装教程&#xff0c;有详细的说明。

【Acwing】154滑动窗口

#include<bits/stdc.h> using namespace std;int n,k; int nums[1000010] {0};int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin>>n>>k;// 下面求最小值int cnt 0;int res[1000010] {0};deque<int> q; // 双端队列 for(int i0;i&l…

Zoho Bigin斩获PCMag推崇:小企业首选CRM软件

当我们谈论企业怎样选择CRM管理系统时&#xff0c;大型企业、中型企业以及小型或初创等不同规模的企业需求各不相同&#xff0c;很难用一套软件来适配所有公司。以小企业为例&#xff0c;大多面临预算紧张、没有专业的IT部门或支持团队、暂时用不到高级定制功能等现状。基于这个…

R语言提高效率的技巧(2)

1、R project&#xff1a;加载数据和脚本不需要设置文件夹&#xff1b;打包project文件夹后发给别人&#xff0c;在另外一个环境中&#xff0c;点击.Rproj文件即可运行。 2、下载原始R包&#xff0c;进行补充和修改。 https://cran.r-project.org/web/packages/available_pack…

智能分析网关V4电瓶车检测与烟火算法,全面提升小区消防安全水平

2024年2月23日&#xff0c;南京市某小区因电瓶车停放处起火引发火灾事故&#xff0c;造成巨大人员伤亡和损失。根据国家消防救援局的统计&#xff0c;2023年全国共接报电动自行车火灾2.1万起。电瓶车火灾事故频发&#xff0c;这不得不引起我们的重视和思考&#xff0c;尤其是在…

RK3568 android11 调试陀螺仪模块 MPU6500

一&#xff0c;MPU6500功能介绍 1.简介 MPU6500是一款由TDK生产的运动/惯性传感器&#xff0c;属于惯性测量设备&#xff08;IMU&#xff09;的一种。MPU6500集成了3轴加速度计、3轴陀螺仪和一个板载数字运动处理器&#xff08;DMP&#xff09;&#xff0c;能够提供6轴的运动…

Socket网络编程(三)——TCP快速入门

目录 概述TCP连接可靠性1. 三次握手过程2. 四次挥手过程3. 为什么挥手需要四次&#xff1f; 传输可靠性TCP核心APITCP传输初始化配置&建立连接客户端创建Socket建立连接服务端创建ServerSocket监听连接ServerSocket 和 Socket的关系 Socket基本数据类型传输客户端数据传输服…

【MySQL】内置函数 -- 详解

一、日期函数 日期&#xff1a;年月日时间&#xff1a;时分秒 1、获得年月日 2、获得时分秒 3、获得时间戳 4、在日期的基础上加日期 5、在日期的基础上减去时间 6、计算两个日期之间相差多少天 7、获得当前时间 ⚪练习 &#xff08;1&#xff09;记录生日 &#xff08;2&…

反转局部链表+牛客

题目链接 链表内指定区间反转_牛客题霸_牛客网 题目描述 代码实现 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param head ListNode类 * param m int整型 * param n int整型 * retur…

微服务篇之分布式事务

一、Seata架构 Seata事务管理中有三个重要的角色&#xff1a; TC (Transaction Coordinator) - 事务协调者&#xff1a;维护全局和分支事务的状态&#xff0c;协调全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器&#xff1a;定义全局事务的范围、开始全局事务、…