二分图——AcWing 257. 关押罪犯

目录

二分图

定义

运用情况

注意事项

解题思路

AcWing 257. 关押罪犯

题目描述

运行代码

代码思路

改进思路

二分图

定义

二分图(Bipartite Graph)是一种特殊的图,在这种图中,顶点可以被分成两个互不相交的集合(设为集合X和Y),并且图中的每一条边都连接一个X集合中的顶点和Y集合中的顶点,没有边连接X集合内的两个顶点,也没有边连接Y集合内的两个顶点。

更形式化地,如果一个无向图G=(V,E),其中V可以被分割成两个子集V1和V2,满足:

  • V = V1 ∪ V2
  • V1 ∩ V2 = ∅
  • 每条边e ∈ E都是在V1和V2之间,即对于任意边(u,v) ∈ E,都有u ∈ V1且v ∈ V2或者u ∈ V2且v ∈ V1。

运用情况

  1. 匹配问题:如工作分配问题,一边是工人,另一边是工作,边表示工人能做对应的工作。最大匹配问题可以使用匈牙利算法解决。
  2. 调度问题:比如课程安排问题,一边是时间槽,另一边是课程,边表示课程可以在这个时间槽上安排。
  3. 推荐系统:用户和商品可以构成二分图,边表示用户对商品的兴趣程度。
  4. 社交网络分析:如用户与他们喜欢的音乐、电影等之间的关系。
  5. 化学结构:分子结构可以被视为二分图,其中原子和键交替排列。

注意事项

  1. 识别二分图:可以通过深度优先搜索(DFS)或广度优先搜索(BFS)来判断一个图是否是二分图,同时划分出两个顶点集合。
  2. 染色法:如果一个图能够用两种颜色给所有顶点着色,使得任何相邻的两个顶点颜色不同,则这个图是二分图。
  3. 奇数环检测:若图中存在奇数长度的环,则该图不是二分图,因为无法用两种颜色正确着色。

解题思路

  1. 二分图判定:使用BFS或DFS进行遍历,为每个顶点着色并检查是否有冲突。
  2. 最大匹配:使用匈牙利算法或增广路径算法寻找最大匹配。
  3. 最小覆盖:Konig定理指出在二分图中,最小顶点覆盖等于最大匹配的大小。
  4. 稳定婚姻问题:如 Gale-Shapley 算法用于解决二分图上的配对问题。

AcWing 257. 关押罪犯

题目描述

257. 关押罪犯 - AcWing题库

运行代码

#include <iostream>
#include <cstring>using namespace std;const int N = 20010, M = 200010;int n, m;
int h[N], e[M], ne[M], w[M], idx;
int color[N];void add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}bool dfs(int u, int c, int mid)
{color[u] = c;bool valid = true;  // 添加剪枝标志for (int i = h[u]; ~i && valid; i = ne[i])  // 增加剪枝条件{int j = e[i];if (w[i] <= mid) continue;if (color[j]){if (color[j] == c) {valid = false;  // 标记不合法break;}}else if (!dfs(j, 3 - c, mid)) {valid = false;  // 标记不合法break;}}return valid;
}bool check(int mid)
{memset(color, 0, sizeof color);bool foundInvalid = false;  // 标记是否找到不合法情况for (int i = 1; i <= n &&!foundInvalid; i++)  // 增加剪枝条件{if (!color[i]){if (!dfs(i, 1, mid)){foundInvalid = true;  // 标记找到不合法break;}}}return!foundInvalid;
}int main()
{memset(h, -1, sizeof h);cin >> n >> m;while (m--){int a, b, w;if (!(cin >> a >> b >> w))  // 输入错误处理{cerr << "Invalid input. Please enter valid integers." << endl;return 1;}add(a, b, w);add(b, a, w);}int l = 0, r = 1e9;while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << l << endl;return 0;
}

代码思路

  1. 图的表示:使用邻接表(hene 数组)来表示图,其中 h[u] 存储与节点 u 相连的第一条边的索引。

  2. 添加边add 函数用于向图中添加有向边及其权重 c。注意,由于图是无向的,因此对于每条无向边,会添加两条有向边。

  3. 深度优先搜索 (DFS)dfs 函数执行深度优先搜索从给定节点 u 开始,并给节点分配颜色(1 或 2),以检查图是否为二分图。如果出现冲突,则返回 false

  4. 检查函数check 函数对所有未着色的节点执行 DFS,并返回布尔值,指示整个图在给定阈值权重 mid 下是否为二分图。

  5. 二分查找:主循环使用二分查找来找到使图不再是二分图的最小阈值权重(l)。

  6. 输入与输出:程序读取节点数量 n 和边的数量 m,然后读取每条边及其权重,最后输出找到的阈值权重。

改进思路

  1. 检查函数的早期终止:当前的 check 函数使用一个标志 foundInvalid 来提前终止,一旦发现图不是二分图则停止计算。这可以提升性能,避免不必要的计算。

  2. 权重比较优化:在 dfs 函数中,权重小于等于 mid 的边被忽略。这样减少了探索的边的数量。

  3. 内存管理:使用邻接表而不是邻接矩阵表示图,尤其对于稀疏图来说,这种方法更加高效。

  4. 输入验证:在读取边时,代码检查无效输入,防止因意外输入导致运行时错误。

  5. 细化二分查找:确保二分查找空间被正确设置,且循环中的查找条件能够准确找到正确的阈值。
  6. 边缘情况处理:检查边缘情况,如空图或没有边的图,以避免不必要的计算。
  7. 错误处理:改进错误处理,提供更详细的错误信息,或优雅地处理错误。

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

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

相关文章

C语言 | Leetcode C语言题解之第233题数字1的个数

题目&#xff1a; 题解&#xff1a; int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;// 但为了让代码看起来更加直观&#xff0c;这里保留了 klong long mulk 1;int ans 0;f…

硬盘HDD:AI时代的战略金矿?

在这个AI如火如荼的时代&#xff0c;你可能以为硬盘HDD已经像那些过时的诺基亚手机一样&#xff0c;被闪存和云存储淘汰到历史的尘埃里。但&#xff0c;别急着给HDD们举行退休派对&#xff0c;因为根据Finis Conner这位硬盘界的传奇人物的说法&#xff0c;它们非但没退场&#…

Linux进程——子进程详解

文章目录 查看进程的另一种方式如何创建子进程fork函数详解fork函数的用法fork函数做了什么为什么fork有两个返回值父子进程的运行顺序是什么样的为什么fork函数的两个返回值不同 在上一节中我们简单介绍了进程的概念&#xff0c;还有父进程和子进程 这篇文章的主要内容是介绍…

eNsp公司管理的网络NAT策略搭建

实验拓扑图 实验需求&#xff1a; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9&#xff0c;多出口环境基于带…

护网HW面试——redis利用方式即复现

参考&#xff1a;https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法&#xff0c;讲到ssrf那么就会讲到配合打内网的redis&#xff0c;本篇就介绍redis的打法。 未授权 原理&#xff1a; Redis默认情况下&#xff0c;会绑定在0.0.0.0:6379&#xff0c;如果没有采用相关…

暴雨让服务器不怕热҈热҈热҈热҈

在AI算力呈几何倍数增长的趋势下&#xff0c;算力逐渐朝着“高性能、高密度、高耗能“发展。在高耗能的算力下&#xff0c;AI服务器功率已逐步逼近风冷散热极限&#xff0c;而液冷作为更加高效、低能耗的制冷技术&#xff0c;逐渐成为了高密度算力散热场景的首选方案。 液冷的…

网络安全----防御----防火墙nat以及智能选路

前面要求在前一篇博客 网络安全----防御----防火墙安全策略组网-CSDN博客 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的ht…

Jenkins中Node节点与构建任务

目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…

Python excel知识库批量模糊匹配的3种方法实例(fuzzywuzzy\Gensim)

前言 当然&#xff0c;基于排序的模糊匹配&#xff08;类似于Excel的VLOOKUP函数的模糊匹配模式&#xff09;也属于模糊匹配的范畴&#xff0c;但那种过于简单&#xff0c;不是本文讨论的范畴。 本文主要讨论的是以公司名称或地址为主的字符串的模糊匹配。 使用编辑距离算法进…

Is Temperature the Creativity Parameter of Large Language Models?阅读笔记

最近有小伙伴来问LLM的参数该如何设计&#xff0c;废话不多说来看看paper吧。首先&#xff0c;常见的可以进行调参的几个值有temperature&#xff0c;top-p和top-k。今天这篇文章是关于temperature的。 原文链接&#xff1a;https://arxiv.org/abs/2405.00492 temperature如果…

OSPF.中DBD数据包

指定路由器---DR的身份 备份指定路由器---BDR的身份&#xff08;RID&#xff09;注意在一个广播域中的所有设备DR和BDR的认知必须统一。 只有DR和BDR会监听224.0.0.6的组播地址 会发出多个数据包 作用&#xff1a; 1.用来主从选举&#xff08;没有携带lsa再要信息的DBD报文…

《斯科特·凯尔比的风光摄影手册》读书笔记

写在前面 《斯科特凯尔比的风光摄影手册》读书笔记整理没有全部读完&#xff0c;选择了感兴趣的章节理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真做完事情&#xff0c;…

LabVIEW心电信号自动测试系统

开发了一种基于LabVIEW的心电信号自动测试系统&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现对心电信号的实时采集、分析和自动化测试。系统包括心电信号采集模块、信号处理模块和自动化测试模块&#xff0c;能够高效、准确地完成心电信号的测量与分析。 硬件系统…

计算机视觉之Vision Transformer图像分类

Vision Transformer&#xff08;ViT&#xff09;简介 自注意结构模型的发展&#xff0c;特别是Transformer模型的出现&#xff0c;极大推动了自然语言处理模型的发展。Transformers的计算效率和可扩展性使其能够训练具有超过100B参数的规模空前的模型。ViT是自然语言处理和计算…

prompt第一讲-prompt科普

文章目录 大语言模型输入要求中英翻译助手直接抛出问题描述问题描述&#xff08;详细&#xff09;问题描述案例问题描述案例上下文问题为什么要加入上下文 prompt总结prompt心得 大语言模型输入要求 大语言模型本质上就是一个NLP语言模型&#xff0c;语言模型其实就是接受一堆…

ubuntu服务器安装labelimg报错记录

文章目录 报错提示查看报错原因安装报错 报错提示 按照步骤安装完labelimg后&#xff0c;在终端输入labelImg后&#xff0c;报错&#xff1a; (labelimg) rootinteractive59753:~# labelImg ………………Got keys from plugin meta data ("xcb") QFactoryLoader::Q…

hutool处理excel时候空指针小记

如图所示&#xff0c;右侧的会识别不到 参考解决方案&#xff1a; /***Description: 填补空缺位置为null/空串*Param: hutool读取的list*return: 无*Author: y*date: 2024/7/13*/public static void formatHutoolExcelArr(List<List<Object>> list) {if (CollUtil…

企业网络实验dhcp-snooping、ip source check,防非法dhcp服务器、自动获取ip(虚拟机充当DHCP服务器)、禁手动修改IP

文章目录 需求相关配置互通性配置配置vmware虚拟机&#xff08;dhcp&#xff09;分配IP服务配置dhcp relay&#xff08;dhcp中继&#xff09;配置dhcp-snooping&#xff08;防非法dhcp服务器&#xff09;配置ip source check&#xff08;禁手动修改IP&#xff09; DHCP中继&…

Android ListView

ListView ListView是以列表的形式展示具体内容的控件&#xff0c;ListView能够根据数据的长度自适应显示&#xff0c;如手机通讯录、短消息列表等都可以使用ListView实现。如图1所示是两个ListView&#xff0c;上半部分是数组形式的ListView&#xff0c;下半部分是简单列表Lis…

《Linux系统编程篇》认识在linux上的文件 ——基础篇

前言 Linux系统编程的文件操作如同掌握了一把魔法钥匙&#xff0c;打开了无尽可能性的大门。在这个世界中&#xff0c;你需要了解文件描述符、文件权限、文件路径等基础知识&#xff0c;就像探险家需要了解地图和指南针一样。而了解这些基础知识&#xff0c;就像学会了魔法咒语…