问题 H: 棋盘游戏(二分图变式)

news2024/11/18 0:12:10

 题意:要求找到

不放车就无法达到最大数的点                     的个数

题解:1.以行列绘制二分图

           2.先算出最大二分匹配数

           3.依次遍历所有边

  删除该边,并计算二分匹配最大值

(若小于原最大值即为重要点),再恢复该边

以下为AC代码:

#include<string.h>
#include<iostream>
using namespace std;

// 声明棋盘
int map[109][109] = { 0 };

// 限制访问
int visit[109] = { 0 };

// 右侧对象数组
int r[109] = { 0 };

// 声明棋盘行列,棋子个数
int line = 0, row = 0, num = 0;

// 二分匹配
bool find(int x);

// 求最大匹配数
int max1();

// 遍历删除并恢复所有边,求影响最大二分匹配的边
int max2();

// 声明最大二分匹配数
int ans = 0;

// 记录各边左右端点对应的下标
int k = 0;
int main()
{
	// 声明棋盘编号
	int n = 1;
	while (scanf("%d%d%d", &line, &row, &num) != EOF)
	{
		memset(map, 0, sizeof(map));
		for (int i = 0; i < num; i++)
		{
			int tl = 0, tr = 0;
			scanf("%d %d", &tl, &tr);
			map[tl][tr] = 1;
		}
		ans = max1();
		printf("Board %d have %d important blanks for %d chessmen.\n", n, max2(), max1());
		n++;
	}
	return 0;
}
// 二分匹配
bool find(int x)
{
	// 遍历右侧元素
	for (int i = 1; i <= row; i++)
	{
		// 判断有无边,是否被访问
		if (map[x][i] && !visit[i])
		{
			visit[i] = 1;
			if (!r[i] || find(r[i]))
			{
				r[i] = x;
				return 1;
			}
		}
	}
	return 0;
}
// 求最大匹配数
int max1()
{
	int ans1 = 0;
	memset(r, 0, sizeof(r));
	for (int i = 1; i <= line; i++)
	{
		memset(visit, 0, sizeof(visit));
		if (find(i))ans1++;
	}
	return ans1;
}
// 遍历删除并恢复所有边,求影响最大二分匹配的边
int max2()
{
	int tans = 0, point = 0;
	for (int j = 1; j <= line; j++)
	{
		for (int i = 1; i <= row; i++)
		{
			if (map[j][i])
			{
				tans = 0;
				map[j][i] = 0;
				tans = max1();
				map[j][i] = 1;
				if (tans < ans) point++;
			}
		}
	}
	return point;
}

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

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

相关文章

安装selenium(超级详细)

selenium本身是一个自动化测试工具&#xff0c;它可以让python代码调用浏览器&#xff0c;并获取到浏览器中加载的各种资源&#xff0c;我们可以利用selenium提供的各项功能&#xff0c; 帮助我们完成数据的抓取。 1、在PyCharm中安装selenium 点击PyCharm界面的下方Terminal…

开源项目datavines内存泄漏问题分析

应用程序开启JMX java -Dspring.profiles.activemysql -Dcom.sun.management.jmxremote.port1099 -Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse -Djava.rmi.server.hostname127.0.0.1 -jar dataVines.jar 通过jdk自带工具&…

探索SOLIDWORKS 3DE云平台:产品数据管理与协作的新时代

SOLIDWORKS 3DE云平台为企业提供了基于云端的全方位解决方案&#xff0c;涵盖了产品设计、仿真验证、制造与生产、市场与营销、数据管理和生命周期等领域。通过这一平台&#xff0c;企业能够将创意转化为现实所需的一切资源。同时&#xff0c;3DE云平台还帮助企业摆脱了IT限制&…

类属性修改(为什么python类不具备被赋值能力?)

为什么python类不具备被赋值能力&#xff1f;&#xff0c;用魔术方法收集实参&#xff0c;在类中可以定义方法处理实际参数&#xff0c;实现对类“赋值”。 (笔记模板由python脚本于2023年11月15日 12:45:27创建&#xff0c;本篇笔记适合初通Python类class的coder翻阅) 【学习的…

数据结构第四课 -----线性表之队列

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

高性能架构设计

1. 引言 高性能架构设计在现代系统中至关重要&#xff0c;它能够应对大规模的数据和用户需求增长&#xff0c;提供优秀的用户体验和实时数据处理能力。同时&#xff0c;它也是解决"三高"问题&#xff08;高并发、高性能、高可用性&#xff09;的关键。 2. 高性能定…

三维模型的顶层合并构建的点云抽稀关键技术分析

三维模型的顶层合并构建的点云抽稀关键技术分析 倾斜摄影超大场景的三维模型的顶层合并通常会生成大量的点云数据&#xff0c;这对于后续处理和应用可能会带来一些挑战。为了减少数据存储和处理的复杂性&#xff0c;可以采用点云抽稀处理技术来降低点云密度和数据量。本文将对几…

weblogic多机集群节点管理服务配置

1.安装启动管理端控制台略过了&#xff0c;登录到控制台&#xff0c; 2.创建集群&#xff0c;配置信息如图&#xff0c;基本默认就行&#xff0c;点完成。点击集群名称&#xff0c;添加服务器 前两个是管理机上的两个服务&#xff0c;后面是另个一个机器的两个节点服务&#…

sql查询结果跟in传入参数顺序一致

Orcle、postgresql、td-sql中可以使用如下语句 select namefrom tbl_user_infowhere id in (4,3,1)order by instr(4,3,1,id);查询结果&#xff1a;

node将package.json中的包降为低版本或者升级为高版本

前言 比如现在你用某个包的当前版本&#xff0c;但是你安装的版本高了&#xff0c;那么你应该这么做 1.首先删除node项目中的node_modules目录&#xff0c;防止安装时的包不一致 如果没安装就忽略 例如将package.json中的view-design包降为^4.6.1,当前view-design的版本为^4.…

基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统

文/朱季谦 环境准备&#xff1a;安装Gin与Gorm 本文搭建准备环境&#xff1a;GinGormMySql。 Gin是Go语言的一套WEB框架&#xff0c;在学习一种陌生语言的陌生框架&#xff0c;最好的方式&#xff0c;就是用我们熟悉的思维去学。作为一名后端Java开发&#xff0c;在最初入门…

优思学院|一文快速看懂TRIZ原理

在创新领域&#xff0c;TRIZ被翻译为发明问题的解决理论。TRIZ理论深刻揭示了创造发明的内在规律和原理&#xff0c;专注于澄清和强调系统中存在的矛盾&#xff0c;旨在完全解决这些矛盾&#xff0c;实现最终的理想解决方案。实践证明&#xff0c;运用TRIZ理论不仅能够极大地加…

BUUCTF 面具下的flag 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;得到一张.jpg图片。 密文&#xff1a; 解题思路&#xff1a; 1、将图片放到Kali中&#xff0c;使用binwalk检测出隐藏zip包。 使用foremost提取zip压缩包到output目录下 解压zip压缩包&…

Linux Ubuntu系统中添加磁盘

在学习与训练linux系统的磁盘概念、文件系统等&#xff0c;需要增加磁盘、扩展现有磁盘容量等&#xff0c;对于如何添加新的磁盘&#xff0c;我们在“Linux centos系统中添加磁盘”中对centos7/8版本中如何添加、查看、删除等&#xff0c;作了介绍&#xff0c;而对Ubuntu版本中…

OpenELA 正式公开 Enterprise Linux 源代码

导读近日消息&#xff0c;在红帽&#xff08;Red Hat&#xff09;宣布不再对外公开 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码之后&#xff0c;同属 Linux 领域的甲骨文、SUSE 及 CIQ 宣布成立了 Open Enterprise Linux Association&#xff08;OpenELA&…

Linux 图形界面配置RAID

目录 RAID 1 配置 RAID 5配置 , RAID 配置起来要比 LVM 方便&#xff0c;因为它不像 LVM 那样分了物理卷、卷组和逻辑卷三层&#xff0c;而且每层都需要配置。我们在图形安装界面中配置 RAID 1和 RAID 5&#xff0c;先来看看 RAID 1 的配置方法。 RAID 1 配置 配置 RAID 1…

【双指针】:Leetcode283.移动零

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本专栏是关于各种算法的解析&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构专栏&…

【python】—— 内置类型、运算符、表达式、关键字

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【管理运筹学】运筹学“背诵手册”(二) | 对偶理论与灵敏度分析

二、对偶理论与灵敏度分析 用矩阵形式表示原问题和对偶问题&#xff1a; max ⁡ z C X s . t . { A X ≤ b X ≥ 0 \max z\pmb{CX}\\ s.t.\begin{cases} \pmb{AX\leq b} \\ \pmb{X}\geq\pmb{0} \end{cases} maxzCXs.t.{AX≤bX≥0​ 其中 C ( c 1 , c 2 , ⋯ , c n ) , X (…

【广州华锐互动】消防科普VR实训展馆增强群众学习兴趣和沉浸感

在现代社会&#xff0c;科技的发展已经深入到我们生活的各个角落&#xff0c;其中包括教育和信息传播领域。3D技术的引入为科普教育提供了全新的可能性。特别是在消防安全教育中&#xff0c;消防科普VR实训展馆的应用&#xff0c;不仅可以提高公众的消防安全意识&#xff0c;还…