罗勇军 →《算法竞赛·快冲300题》每日一题:“小球配对” ← 并查集

news2024/12/25 9:16:12

【题目来源】
http://oj.ecustacm.cn/problem.php?id=1850
http://oj.ecustacm.cn/viewnews.php?id=1023

【题目描述】
给定 n 个小球,编号为
1-n,给定 m 个篮子,编号为 1-m
每个球只允许放入样例给定的编号为 Ai 或者 Bi 的两个篮子中的 1 个。
每个球必须放入某个篮子。
如果篮子中球的数量为奇数,则该篮子是特殊的。
计算特殊的篮子最少有多少个。

【输入格式】
第一行为两个正整数 n 和 m,1≤n,m≤200000。表示 n 个小球,m 个篮子。
接下来 n 行,每行两个数字 Ai,Bi,表示第 i 个球可以放入 Ai
或者 Bi 编号的篮子。
1≤Ai,Bi≤m,Ai≠Bi。

【输出格式】
输出一个数字表示答案。

【输入样例】
4 3
1 2
2 3
1 3
1 2

【输入样例】
0

【算法分析】

◆ 异质图
本题本质上是异质图问题。异质图是一种具有多种节点类型或多种边类型的图数据结构,用于刻画复杂异质对象及其交互,具有丰富的语义信息。
本题异质图构建的依据是:将某球放入某个篮子,则此球与篮子之间就有连线,否则就没有连线。
依据本题样例,将第 i 个球放入 Ai
或者 Bi 编号的篮子中,可得出如下的异质图。其中,从某个小球引出的两条线,分别以一实线和一虚线表示(切记:根据题意,从某个小球引出的一实线和一虚线不能共存,只能取其一。此处都画出,只是为了示意)。

根据“从某个小球引出的一实线和一虚线不能共存,只能取其一”的约束,可得出符合本题题意的一种异质图。如下所示。

可见,若依据图论的观点,上面的示意图由若干个连通子图构成。那么问题来了。一个连通子图中,最少有多少个是特殊篮子?显然,如果连通子图中的线条是偶数,则特殊篮子最少为0个;如果连通子图中的线条是奇数,则特殊篮子最少为1个。
为了求解连通子图中的特殊篮子数,首选并查集。因为,
并查集是求解判定连通子图相关问题的得力工具

◆ 并查集
并查集模板:https://blog.csdn.net/hnjzsyjyj/article/details/120147618

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

void merge(int x,int y) {
    int p=find(x);
    int q=find(y);
    if(p!=q) pre[p]=q;
}

并查集模板题之求团伙数量:https://blog.csdn.net/hnjzsyjyj/article/details/120120591

#include <bits/stdc++.h>
using namespace std;
 
const int maxn=100;
int pre[maxn];
 
int find(int x) { //寻找x的父节点
    if(x!=pre[x]) pre[x]=find(pre[x]);
    return pre[x];
}
 
void merge(int x,int y) { //合并两个子集
    int p=find(x);
    int q=find(y);
    if(p!=q) pre[p]=q;
}
 
int main() {
    int u,v,p,q;
    int ans;
 
    cin>>u>>v; //顶点数、边数
    for(int i=1; i<=u; i++) //初始时每个节点的父节点都是自己
        pre[i]=i;
 
    for(int i=1; i<=v; i++) {
        cin>>p>>q; //边的两个顶点序号
        merge(p,q);
    }
 
    for(int i=1; i<=u; i++) {
        if(find(i)==i) ans++; //计算连通子图个数,也就是得出几个团伙
    }
 
    cout<<ans<<endl;
 
    return 0;
}
 
 
/*
in:
10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4

out:
3
*/

【算法代码】

#include<bits/stdc++.h>
using namespace std;

const int maxn=2e5+5;
int cnt[maxn],pre[maxn],st[maxn];
int n,m;

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

void merge(int x,int y) {
    int p=find(x);
    int q=find(y);
    if(p!=q) {
        pre[p]=q;
        cnt[q]+=cnt[p]+1;
    } else cnt[p]++;
}

int main() {
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++) pre[i]=i;
    for(int i=1;i<=n;i++) {
        int x,y;
        scanf("%d %d",&x,&y);
        merge(x,y);
    }

    int ans=0;
    for(int i=1;i<=m;i++) {
        int x=find(i);
        if(!st[x]) {
            if(cnt[x] & 1) ans++;
            st[x]=1;
        }
    }
    printf("%d",ans);

    return 0;
}


/*
in:
4 3
1 2
2 3
1 3
1 2

out:
0
*/




【参考文献】
https://blog.csdn.net/weixin_43914593/article/details/131800622

https://blog.csdn.net/hnjzsyjyj/article/details/120120591
https://blog.csdn.net/hnjzsyjyj/article/details/120147618



 

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

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

相关文章

从不均匀性角度浅析AB实验

本篇的目的是从三个不均匀性的角度,对AB实验进行一个认知的普及,最终着重讲述AB实验的一个普遍的问题&#xff0c;即实验准确度问题。 一、AB实验场景 在首页中&#xff0c;我们是用红色基调还是绿色基调&#xff0c;是采用门店小列表外商品feed&#xff08;左图&#xff09;…

【jstat命令】查看jvm内存占用和GC情况

以下两个常用命令 第一个命令&#xff1a;用作查看内存占用和GC情况&#xff08;当前老年代内存空间、老年代使用空间…&#xff09;&#xff1b; 第二个命令&#xff1a;用作查看内存分配情况&#xff08;老年代最小内存空间、老年代最大内存空间…&#xff09;。 1、当前内存…

excel文本函数篇3

replace的替换&#xff0c;是通过指定位置做替换&#xff0c;只能替换一个&#xff0c;跟python中的不一样&#xff0c;python中是通过字串替换。那么怎么实现全部替换呢&#xff1f; ----> substitute函数 &#xff08;1&#xff09;后缀没有B&#xff1a;一个字节代表一个…

补充1 MATLAB_GUI_通过普通按钮PushButton的回调函数ButtonDownFcn创建一个长按回调按钮

目录 一、实例效果二、补充的知识点&#xff08;两种回调函数&#xff09;三、步骤  1. 先建一个空白的GUI。  2.在GUI Figure 上添加一个按钮&#xff08;PushButton&#xff09;组件&#xff0c;并设置其属性&#xff0c;例如位置、大小和文本等。  3.CtrS保存一下GUI。…

回流焊炉温曲线图讲解

从下面回流焊炉温曲线标准图分析回流焊的原理&#xff1a; 当PCB进入升温区&#xff08;干燥区&#xff09;时&#xff0c;焊锡膏中的溶剂、气体蒸发掉&#xff0c;同时焊锡膏中的助焊剂润湿焊盘、元器件端头和引脚&#xff0c;焊锡膏软化、塌落、覆盖了焊盘&#xff0c;将焊盘…

vue 项目在编译时,总是出现系统崩的状态,报错信息中有v7 或者 v8 的样式-项目太大内存溢出

vue 项目在编译时&#xff0c;总是出现系统崩的状态&#xff0c;node 命令框也会报错&#xff0c;如下图&#xff1a;有v7 或者 v8 的样式。 原因分析&#xff1a; 分析&#xff1a;遇到与上面图片相似的问题&#xff0c;我们要首先要想到是否是 有关内存的问题&#xff0c;当然…

2023年科技趋势展望报告,这几个领域程序员可以恰饭

太空电梯、MOSS、ChatGPT等&#xff0c;都预兆着2023年注定不会是平凡的一年。那么在2023年&#xff0c;科技领域都有哪些发展趋势呢&#xff1f; 麦肯锡发布了最新的《2023科技趋势展望报告》&#xff0c;从通用人工智能到未来生物工程&#xff0c;总结了备受关注的15种科技趋…

【Unity细节】Unity制作汽车时,为什么汽车会被弹飞?为什么汽车会一直抖动?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

8.注册中心-nacos

1.Nacos 之前有用过spring cloud的eureka注册中心&#xff0c;配置起来稍微繁琐&#xff1b;nacos是阿里开发的一款注册中心&#xff0c;操作就简单多了 1.1 Nacos 下载 Nacos 快速开始这个快速开始手册是帮忙您快速在您的电脑上&#xff0c;下载、安装并使用 Nacos。https:/…

独立站推广方式盘点,轻松赢得流量和收益!

独立站不受平台限制&#xff0c;不用给平台佣金&#xff0c;好是很好&#xff0c;但它的问题在于它完全没有自然流量。想要做独立站&#xff0c;就必须做推广。独立站推广怎么做&#xff1f;看这篇准没错&#xff01; 01.SEO搜索引擎优化 搜索引擎优化&#xff08;SEO&#x…

nlp系列(7)三元组识别(Bi-LSTM+CRF)pytorch

模型介绍 在实体识别中&#xff1a;使用了Bert模型&#xff0c;CRF模型 在关系识别中&#xff1a;使用了Bert模型的输出与实体掩码&#xff0c;进行一系列变化&#xff0c;得到关系 Bert模型介绍可以查看这篇文章&#xff1a;nlp系列&#xff08;2&#xff09;文本分类&…

摄影预约小程序开发全攻略

当今社会&#xff0c;移动互联网的普及使得手机APP和小程序成为了各行各业的必备工具。在摄影行业&#xff0c;如何让客户更加方便地预约摄影服务&#xff0c;提高工作效率&#xff0c;成为了摄影店主们亟需解决的问题。而定制一款适合自己摄影店的小程序&#xff0c;将成为一种…

【IT运维知识】暴力破解和防暴力破解定义说明

很多刚入行的小伙伴对于暴力破解相关知识不是很了解&#xff0c;今天我们就来简单聊聊。 暴力破解 暴力破解是指采用反复试错的方法并希望最终猜对&#xff0c;以尝试破解密码或用户名或找到隐藏的网页&#xff0c;或者找到用于加密消息的密钥。这是一种较老的攻击方法&#x…

Java免费自学网站墙裂推荐!!!!

最近&#xff0c;常有一些读者问我&#xff1a;“有没有什么推荐的Java学习网站啊&#xff1f;” 因为一直没有时间&#xff0c;所以我之前也是让大家上知乎、搜索引擎搜一下就好了。 但是&#xff0c;我深知不能这样&#xff0c;应该拿出更真诚的态度带来优质的内容。 于是…

TP-Link 智能灯泡缺陷能让黑客窃取用户 WiFi 密码

来自意大利和英国的研究人员在 TP-Link Tapo L530E 智能灯泡和 TP-Link Tapo 应用程序中发现了4个漏洞&#xff0c;攻击者可以利用这些漏洞窃取目标的 WiFi 密码。 TP-Link Tapo L530E 是包括亚马逊在内的多个市场上最畅销的智能灯泡。TP-link Tapo是一款智能设备管理应用程序…

Mybatis动态SQL和模糊查询

一. Mybatis动态SQL 动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中&#xff0c;开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如&#xff0c;拼接时要确保添加了必要的空格&#xff0c;还要注意去掉列表最后一…

MySQL 8.0 启动和关闭流程

启动流程 mysql 服务端对启动命令进行了层层封装&#xff0c;目的是为了操作简便。同时也提供了原生的启动方式以便应对特殊情况。 建议: systemctl start起来的就使用systemctl stop停。 如果用mysqld stop&#xff0c; systemctl识别不到。 启停方式 systemd ---->/et…

Flink源码之Checkpoint执行流程

Checkpoint完整流程如上图所示&#xff1a; JobMaster的CheckpointCoordinator向所有SourceTask发送RPC触发一次CheckPointSourceTask向下游广播CheckpointBarrierSouceTask完成状态快照后向JobMaster发送快照结果非SouceTask在Barrier对齐后完成状态快照向JobMaster发送快照结…

python 声音录制、保存及播放

参考&#xff1a; https://huggingface.co/suno/bark 1、录制、保存 参考&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/131269539&#xff08;ffmpeg也可以录制&#xff09; 下面使用的sounddevice包录制 import scipysampling_rate model.config…

云计算在IT领域的发展和应用

文章目录 云计算的发展历程云计算的核心概念云计算在IT领域的应用1. 基础设施即服务&#xff08;IaaS&#xff09;&#xff1a;2. 平台即服务&#xff08;PaaS&#xff09;&#xff1a;3. 软件即服务&#xff08;SaaS&#xff09;&#xff1a; 云计算的拓展应用结论 &#x1f3…