hdu2819 Swap

2024-05-28 10:48
文章标签 swap hdu2819

本文主要是介绍hdu2819 Swap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给行列均为n的由0和1构成的矩阵,

求一种方案,每次交换两行或两列,使得最后从左上到右下的对角线上全部为1,没有方案则输出0.


首先用二分图最大匹配求可行解。

主要是输出比较麻烦,我是每次循环交换一次,保证有一个已经换到的对的位置,最多n次一定能把所有行列换到正确位置。


#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#pragma comment(linker, "/STACK:16777216")
#define eps 1e-6
#define ll long long
using namespace std;int n,mx[110],my[110],vis[110],e[110][110];int path(int i)
{int j;for(j=1;j<=n;j++){if(e[i][j]&&!vis[j]){vis[j]=1;if(my[j]==-1||path(my[j])){my[j]=i;mx[i]=j;return 1;}}}return 0;
}int hungary()
{int res=0;memset(mx,-1,sizeof mx);memset(my,-1,sizeof my);for(int i=1;i<=n;i++){if(mx[i]==-1){memset(vis,0,sizeof vis);res+=path(i);}}return res;
}int main()
{int i,j;while(~scanf("%d",&n)){for(i=1;i<=n;i++){for(j=1;j<=n;j++)scanf("%d",&e[i][j]);}int ans=hungary();if(ans!=n) printf("-1\n");else{int p[110][2],flag=1;ans=0;memset(vis,0,sizeof vis);for(i=1;i<=n;i++){flag=0;//  printf("i:%d mxi:%d\n",i,mx[i]);if(!vis[i]&&mx[i]!=i){flag=1;p[ans][0]=i;p[ans++][1]=mx[i];vis[mx[i]]=1;mx[i]=mx[mx[i]];i=1;}if(i==n&&!flag) break;}printf("%d\n",ans);for(i=0;i<ans;i++)printf("R %d %d\n",p[i][0],p[i][1]);}}return 0;
}/*
4
0 1 0 0
0 0 1 0
0 0 0 1
1 0 1 1
*/


这篇关于hdu2819 Swap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010357

相关文章

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

linux定时监听ssh服务是否启动-------麒麟操作系统永久关闭swap

linux监听ssh服务是否启动 1、监听脚本2、定时任务3、麒麟操作系统,永久关闭swap 1、监听脚本 #在/usr/local/bin目录下新建脚本文件 cd /usr/local/bintouch check_sshd.sh#给可执行权限chmod +x /usr/local/bin/check_sshd.sh 脚本内容如下: #!/bin/bashs

日常避坑指南:如何合理利用Swap优化MongoDB内存管理

MongoDB作为一款高性能的NoSQL数据库,广泛应用于大数据处理和实时应用中。然而,面对批量数据写入时,MongoDB对内存的需求极为苛刻,尤其是在测试服务器或资源受限的环境下,容易引发系统性能问题。本文将探讨如何通过合理利用Swap来优化MongoDB的内存管理,确保系统的稳定运行。 问题背景:内存不足与系统卡死 在测试环境中,当MongoDB执行大规模数据读写操作时,服务器负载常常

Linux内存、Swap、Cache、Buffer详细解析

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 后台回复“k8s”,可领取k8s资料 来源:r6d.cn/abK6G 1. 通过free命令看Linux内存 total:总内存大小。 used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。 free:空闲的内存大小。 shared:进程间共享内存(一般不会用,可以忽略)。 buffers:

HDU 2819 Swap (行列匹配+输出解)

题意:能否使对角线上全是1 ,这个简单直接按行列匹配,难在路径的输出,我们知道X,Y左右匹配完了之后,不一定是1–1,2–2,3–3……这样的匹配。可能是1–3,2–1,3–2,我们要把他们交换成前一种的匹配形式,也就是路径的答案,再有矩阵的一些关于秩的性质,行变换和列变换是等价的。 #include<cstdio>#include<iostream>#include<algorithm>

条款25 考虑写出一个不抛异常的swap函数

总结:      如果 std::swap 对于你的类型来说是低效的,请提供一个 swap 成员函数,并确保你的 swap 不会抛出异常。      如果你提供一个成员 swap,请同时提供一个调用成员swap的非成员swap。对于类(非模板),还要特化 std::swap。      调用swap时,请为std::swap使用一个using声明式,然后在调用 swap时不使用任何names

linux swap slot机制

将anonymous页面swap out的时候,需要从磁盘上分配空闲的swap slot。内存page的申请可以依靠slab cache来加快分配速度,那swap slot的分配呢?Intel的工程师Tim Chen于2016年提交了一个patch,实现了为加快swap slot分配速度的swap slot cache机制(注意需要区别于swap cache)。 其基本的思想是:swap slo

Linux性能调优指南(2):内存与Swap分区调优

文章目录 二, 内存性能调优1,增加内存容量:基本流程与考虑因素大概的流程吧 2,内存压缩技术:在Linux上启用与配置zRAM如何在Linux系统上启用和配置zRAM的步骤: 3,内存清理工具:编写脚本或安装与使用BleachBi安装 BleachBit 的步骤: 4,Swap分区调优:前提条件、详细步骤与GParted安装4.1 前提条件与注意事项4.2 调整Swap分区的详细步骤4.

【Linux】Linux系统配置Swap

在Linux操作系统中,内存(RAM)是运行应用程序和处理数据的核心资源。当系统中的可用物理内存不足时,系统性能可能会显著下降,甚至导致程序崩溃或系统停滞。为了应对这种情况,Linux提供了Swap空间作为内存管理的一部分,确保系统在内存耗尽时仍能维持稳定运行。 Swap空间是操作系统的一种虚拟内存机制。当物理内存(RAM)不足以容纳正在运行的所有程序时,操作系统会将部分不常用的内存数据(如长期