BZOJ 1059 [匈牙利算法]

匈牙利优化:它是一种改进的匈牙利算法,适用于方阵和非方阵输入。-matlab开发 运行“MAIN.m”文件出现提示时输入任意分配矩阵作为目标矩阵如果类型是最大化类型,则在提示时输入 1 否则为 0 然后打印最大或最小总数之后打印分配矩阵,其中标记为 1 的元素被视为分配位置,否则为 0。将这些矩阵与输入矩阵进行比较以识别分配。 线矩阵由减号给出,按照减号轨迹识别线 仅打印唯一的解决方案集 注意:对于非方阵,该算法最适用于行/列短为方阵的矩阵 使用的功能: findminlines2coverall0(A) = 用最少的行数覆盖所有的零Improvement(A,linematrix)=如果总行数小于row = col数,则将最小未覆盖的val与交集元素相加,并从未覆盖的元素中减去(根据当前行矩阵完成) finalAssignment(A) = 制作最终作业集 立即下载

1059: [ZJOI2007]矩阵游戏
Description
  小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程序来判断这些关卡是否有解。
Input
  第一行包含一个整数T,表示数据的组数。接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。
Output
  输出文件应包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。
Sample Input
2
2
0 0
0 1
3
0 0 1
0 1 0
1 0 0
Sample Output
No
Yes
【数据规模】
对于100%的数据,N ≤ 200

这道题还是要会建模。
对提议分析发现,原本在同一行或者同一列的格子在操作以后依旧在同一行或者同一列。
就可以把问题转化成求最后是否每一行每一列都能有至少一个黑格子
把一行和一列看成一个节点,我们就得到了一个二分图。最后就相当于求是否有完美匹配。于是匈牙利算法

附代码:

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#define N 210
using namespace std;

inline char get(void) {
    static char buf[100000], *p1 = buf, *p2 = buf;
    if (p1 == p2) {
        p2 = (p1 = buf) + fread(buf, 1, 100000, stdin);
        if (p1 == p2) return EOF;
    }
    return *p1++;
}
inline void read(int &x) {
    x = 0; char c;
    for(c = get(); c < '0' || c > '9'; c = get());
    for(; c >= '0' && c <= '9'; x = x * 10 + c - '0', c = get());
}

int test, n;
int map[N][N], match_to[N], used[N];

inline bool dfs(int x) {
    for(int i = 1; i <= n; i++) {
        if (!used[i] && map[x][i]) {
            used[i] = 1;
            if(!match_to[i] || dfs(match_to[i])) {
                match_to[i] = x; return 1;
            }
        }
    }
    return 0;
}

int main(void) {
    read(test);
    while(test--) {
        read(n);
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                read(map[i][j]);
        memset(match_to, 0, sizeof(match_to));
        for(int i = 1; i <= n; i++) {
            memset(used, 0, sizeof(used));
            if (!dfs(i)) {
                puts("No"); break;
            }
            if (i == n) puts("Yes");
        }
    }
    return 0;
}
别再让电池充不满!用CN3791芯片设计太阳能充电电路,这几个调试坑我帮你踩了 本文详细解析了使用CN3791芯片设计太阳能充电电路时的常见调试问题及解决方案。从RCS电阻的选择到MPPT电压偏差的修正,再到线路损耗和温度补偿的优化,提供了全面的避坑指南。通过实测数据和优化方案,帮助工程师提升锂电池充电效率,确保太阳能充电电路的稳定性和可靠性。 阅读详情

相关推荐

OpenCode:开源代码智能代理平台的全面解析

OpenCode是一个开源代码智能代理平台,采用模块化微服务架构,支持多种AI模型集成。该系统包含前端交互层、代理服务层和模型集成层,提供Build、Plan和General三种代理模式,分别负责代码编写、分析和复杂任务处理。OpenCode支持跨平台安装,具备权限验证、上下文感知等安全机制,并集成LSP协议实现深度代码理解。相比竞品,其开源特性、终端优先设计和提供商无关架构具有明显优势,适用于个人开发、团队协作等多种场景,为开发者提供强大的AI辅助编程能力。

Aaron_945的博客 1423

【数学与算法】二部图、匈牙利匹配、稳定婚配

14.1 二部图 广度优先搜索 广度优先,可以使用队列来操作,依次遍历节点,首先遍历节点A,判断节点A是否遍历过,如果节点A没有遍历过,就把节点A添加进队列。然后取出队列中的第一个元素A,对于和节点A连接的某节点B和节点C等,把节点B和c进行标记(标记就是根据题目的具体要求进行操作,即你的目的是什么你就干什么),并且如果节点B和c没有遍历过,那么把节点B和C添加进队列。然后再取出队列中的第一个元素,就是节点B,遍历到了B节点,再对和B节点连接的节点D进行标记,并且判断D是否遍历过,没有遍历过的话就添加到队列

u011754972的博客 1330

STM32 IAP跳转后APP卡死?别慌,手把手教你修复HAL_RCC_OscConfig时钟配置冲突

本文深入分析了STM32 IAP跳转后APP在HAL_RCC_OscConfig函数中卡死的问题,揭示了PLL时钟配置冲突的根本原因。通过详细的代码示例和分步解决方案,指导开发者正确处理STM32F1/F4系列的时钟系统二次初始化问题,确保IAP+APP架构的稳定运行。

weixin_28685287的博客 365

[BZOJ]1059 矩阵游戏(ZJOI2007)

  虽然说是一道水题,但小C觉得还是挺有意思的,所以在这里mark一下。 Description   小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行...

L183287669的博客 338

企业信息化系统的组成模块-核心业务系统

通过标准化的数据流形成完整的业务闭环,CRM生成的销售订单驱动ERP的生产和采购,ERP将生产计划传递给MES执行,MES报工数据返回ERP进行成本核算,ERP再将交付信息同步给CRM供客户查询。生产管理确保高效交付,缩短订单周期。某贸易公司实施ERP供应链模块后,库存周转率从每年4次提升到8次,库存资金占用从2000万降到1200万,释放800万现金流,同时缺货率从15%降到5%。│ │库存 │ │ MRP │ │ ERP │ │ 云ERP/ │ │。

weiyvyy的博客 694

关于示波器测485串口波特率的使用方法总结

之前没有用过示波器,更不知道怎么来测试串口的波特率,结果遇到一客户说我们产品的波特率达不到9600,只有9100,为了验证这一说法,我们只能自己测试一下。说明:产品通过485接电脑,用串口调试助手接收都是没有问题的,用客户的设备接收就有问题。 下面说一下示波器测波特率的方法步骤: 显示高低跳变的情况: 1.先把示波器表笔的地线(夹子)夹485B,表笔夹485A。 2.往串口发送数据:如发送

lianxue1986的专栏 3万+

BZOJ【1059】矩阵游戏

传送门 怎么也没想到是二分图。。。 我们首先考虑,交换行或列并不会改变当前行或列黑格的数目,这也就说明了,在同一条直线上的黑格永远不会不在同一条直线。而我们要一条对角线,就相当于找一组黑格,满足没有任何格子在同一条直线上。 怎么建图?既然与一条直线上黑格数目没有关系,我们可以把边看做点,把黑格看作边,在行与列之间连线,容易看出是一个二分图,我们只要看有没有完美匹配就行了 PS:我拿网络流写...

Richard__Luan的博客 395

C#上位机性能优化全攻略:彻底解决界面卡顿+多线程死锁+PLC数据延迟,产线实测稳定运行2年

一开始我们用的是网上找的零散优化代码,根本满足不了要求,后来花了2个月的时间,把之前27条产线的代码整理、重构、优化,做了一套这套方案上线后,连续稳定运行2年零3个月:界面响应时间稳定在50ms以内,多线程死锁率持续为0,PLC数据延迟稳定在150ms以内,系统可用率≥99.99%,帮客户一年省下了超过480万的停线损失、罚款损失和人工成本,客户第二年就把剩下的22条产线也全部交给我们做了,还介绍了3家同行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 293

【BZOJ1059】二分图匹配

题意很简单,一看就懂 做题前: 这不就是随便模拟一下就完了吗?我让每行每列都记录一下,只要有n个不同行不同列的黑子就行了吧 遂码 WA ??? why??? 是哦,好像不太行,因为如果同一行或者同一列里面有好几个一样的,我只是把最早出现的记录下来,其实并不一定用到它。 分析 那么我把每一个行列匹配了,最终[i,i]都匹配了是不是就可以了啊 于是我把黑子的行连向列,然后二分图就建完了。 跑一边二分图...

KIKO_caoyue的博客 200

使用conda环境python3.13和python3.12下安装vllm过程记录

使用conda环境python3.13和python3.12下安装vllm过程记录

没刮胡子的程序员专栏 885

paddle 43 用onnxruntime实现ppyoloe模型的部署(含python和c++版本)

PP-YOLOE+是PP-YOLOE模型的升级版,PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。paddle官方只给出了基于paddle框架的部署案例,为了更好的部署,为此实现将paddle模型转换为onnx模型,然后在python下实现onnxruntime部署。后续会补充c++ onnxruntime部署

a486259的博客 1914

BZOJ 1059 矩阵游戏(二分图匹配,匈牙利算法)

题目链接:BZOJ 1059 通过分析,我们知道,行交换和列交换不会改变这一行的信息,这一行最多有一个1放在主对角线上。对于坐标为(i,j)的为黑色的棋子,我们只需将i行与j列连边,然后跑匈牙利算法即可。 #include #include #include using namespace std; int T,N; int map[210][210],vis[210],belong[210

顺 784

Autosar MCAL-S32K324 Fls配置-基于EB

Autosar MCAL Flash配置,基于S32K324,EB软件

赞的博客 1513

BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括   有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左上角到右下角的对角线上的数字都是1。 题解   我们发现,题目模型可以转换。   其实题目就是叫我们求是否存在一些1,这些1所在的行和列互不相同。   我给...

weixin_30323961的博客 154

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【BZOJ1059】[ZJOI2007] 矩阵游戏(匈牙利算法)

点此看题面 大致题意: 有一个\(N*N\)的\(01\)矩阵,可以任意交换若干行和若干列,问是否有方案使得左上角到右下角的连线上全是\(1\)。 题意转换 首先,让我们来对题意进行一波转化。 如果我们把\(x\)坐标看作一张二分图左半部分的点,把\(y\)坐标看作右半部分的点,那么题意就转化成了求这张图是否存在完美匹配。 又由于每次只能交换行与列,因此每行存在的元素和每列存在的元素是固定不变的。...

weixin_30344131的博客 137

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【ZJOI2007】【BZOJ1059】矩阵游戏 匈牙利算法

题目描述  小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上...

weixin_30951389的博客 181

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

(匈牙利算法) bzoj 1059

1059: [ZJOI2007]矩阵游戏 Time Limit:10 SecMemory Limit:162 MBSubmit:2447Solved:1206[Submit][Status][Discuss] Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只...

weixin_30600503的博客 73

bzoj 1059 [ZJOI2007]矩阵游戏——匈牙利算法

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1059 发现不管怎么换,同一列的元素还是在同一列,同一行的元素还是在同一行。 所以必要条件是每一行、每一列都至少有一个黑格子。 但这不是充要条件。比如一个L形的就不能。 如果从答案向别的情况变换的话,变换到的各种情况一定是:如果每一列都只贡献一个黑格子,它们能占满所有行。 行列连边跑...

weixin_34015336的博客 123

[bzoj]1059矩阵游戏<二分图匹配*匈牙利算法>

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 初见此题,我觉得这是水题,我认为只要每一行和每一列至少存在一个黑格就可以出现对角线,但是在一位名叫*ZJ的AK大佬用一张图点醒我后,我幡然醒悟 就是这张图,因为这图的每一列和每一行都至少含一个黑格,但是这张图无论怎么样操作都得不到对角线,然后在这位大佬的进一步提醒下...

baixunjiu2536的博客 168

BZOJ1059 矩阵游戏

目录 BZOJ1059 矩阵游戏 题解 code BZOJ1059 矩阵游戏 题目传送门 题解 刚开始理解错题意了,以为除了主对角线上之外都不能有1.后来发现只要主对角线上可以都是1就是合法的了。实际上的题意就是让你判断\(n\)行与\(n\)列是否可以都匹配上,这样就是一...

dieyi9889的博客 175

【bzoj1059】 [ZJOI2007]矩阵游戏 匈牙利算法

题解 在同一行同一列的1无论怎么换来换去都会在同一行同一列, 如果想通过转换变到主对角线上必须满足有n个点不在同一行不在同一列,那么我们以i为一边以j为一边进行二分图匹配即可。 代码 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;cctype&gt; using...

Mininda 426

BZOJ 1059: [ZJOI2007]矩阵游戏 匈牙利算法

1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2351  Solved: 1156 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1059 Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游...

weixin_33962923的博客 112

【bzoj 1059】[ZJOI2007]矩阵游戏(匈牙利算法)

夜深了 蝉眠了 泪坠了

reverie_mjp的博客 341

BZOJ1059 ZJOI2007 矩阵游戏 【二分图匹配】

BZOJ1059 ZJOI2007 矩阵游戏 Description   小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换、对应格子的颜...

Dream_maker的博客 371

bzoj 1059: [ZJOI2007]矩阵游戏【匈牙利算法】

注意到怎么换都行,但是如果把某个黑方块用在对角线上,它原来所在的行列的的黑方块就都不能用 所以要选出n组不重的行列组合,这里用匈牙利算法做二分图匹配即可(用了时间戳优化) #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=405; int ...

weixin_30443895的博客 105
上一篇: BZOJ 1088 [枚举][递推]
下一篇: BZOJ 1012 [线段树]
Vectorxj
博客等级 码龄11年 35粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值