HDU2819
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2819
题目大意:
给出一个N*N的0/1矩阵,只能交换整行或者整列,问最少交换多少次可以变成一个主对角线上的数都为1的矩阵。
解题思路:
对行和列进行二分匹配,如果行和列之间不是完全匹配,直接输出 -1;否则就对匈牙利算法匹配后的得到的每一列对应的行进行操作(当然你也可以是对列进行操作,后面的交换也要进行相应的调整),如果行i不对应于列i,而行j对应列i,那么交换第i,j列。好题!
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=+;
bool link[maxn][maxn],vis[maxn];
int col[maxn]; //记录匈牙利算法跑完以后各列所匹配的行
int N;
pair<int,int> ans[maxn];
bool finds(int x){
for(int i=;i<=N;i++){
if(link[x][i]&&!vis[i]){
vis[i]=true;
if(col[i]==||finds(col[i])){
col[i]=x;
return true;
}
}
}
return false;
}
int main(){
int t;
while(scanf("%d",&N)==){
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
scanf("%d",&t);
if(t) link[i][j]=true;
else link[i][j]=false;
}
}
memset(col,false,sizeof(col));
bool no=false;
for(int i=;i<=N;i++){
memset(vis,false,sizeof(vis));
if(!finds(i)){
no=true; break;
}
}
if(no) printf("-1\n");
else{
int cnt=;
for(int i=;i<=N;i++){
if(col[i]==i) continue;
else{
for(int j=i+;j<=N;j++){
if(col[j]==i){
ans[cnt]=make_pair(i,j);
col[j]=col[i];
cnt++;
}
}
}
}
printf("%d\n",cnt);
for(int i=;i<cnt;i++){
printf("C %d %d\n",ans[i].first,ans[i].second);
}
}
}
return ;
}
HDU2819的更多相关文章
- hdu1281+hdu2819(最大匹配数)
分析:将行和列缩点,即行对应二分图的X部,列对应二分图的Y部,然后交点为连接该行和该列的一条边.匹配时每点都会把整行整列占了,因此就不会出现冲突了. 传送门:hdu1281 棋盘游戏 #include ...
- HDU2819 Swap —— 二分图最大匹配
题目链接:https://vjudge.net/problem/HDU-2819 Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- hdu-2819.swap(二分匹配 + 矩阵的秩基本定理)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Swap[HDU2819]
SwapTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission ...
- hdu2819二分图匹配
Given an N*N matrix with each entry equal to 0 or 1. You can swap any two rows or any two columns. C ...
- Hdu2819 Swap
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU2819(KB10-E 二分图最大匹配)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU2819:Swap(二分图匹配)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU-2819
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU2819(二分图匹配,记录过程)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 汉字编码对照表(gb2312/Big5/GB2312)
一.汉字编码的种类 1.GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆.新加坡等地也使用此编码.它是一个简化字的编码规范,当然也包括其他的符号.字母.日文假名等,共74 ...
- wampserver安装之后无法打开localhost
2019独角兽企业重金招聘Python工程师标准>>> 如上图 是服务未成功启动 服务成功启动标志 修改服务器监听端口 在安装完wampserver,打开,如果在状态栏上的图标不是绿 ...
- Shiro(一):Shiro介绍及主要流程
什么是Shiro Apache Shiro是一个强大且灵活的开源安全框架,易于使用且好理解,撇开了搭建安全框架时的复杂性. Shiro可以帮助我们做以下几件事: 认证使用者的身份 提供用户的访问控制, ...
- 崛起于Springboot2.X之开发拦截器(21)
为什么80%的码农都做不了架构师?>>> 序言:几乎所有项目都需要拦截器,所以小伙伴们必须要掌握这门技术哦,不然只会mybaits增删改查那是实习生干的活呀. 1.创建拦截器类, ...
- Excel中拆分列
常常在linux下我们写个shell,结果输出至txt中需要把数据一条一条的抠出来,也是很累人的事情,而直接输出值excel中的话相对较简单,但是会集中在第一列.这时候也不用担心,在Excel中选择第 ...
- #Week8 Advice for applying ML & ML System Design
一.Evaluating a Learning Algorithm 训练后测试时如果发现模型表现很差,可以有很多种方法去更改: 用更多的训练样本: 减少/增加特征数目: 尝试多项式特征: 增大/减小正 ...
- Spring IOC的核心机制:实例化与注入
上文我们介绍了IOC和DI,IOC是一种设计模式,DI是它的具体实现,有很多的框架都有这样的实现,本文主要以spring框架的实现,来看具体的注入实现逻辑. spring是如何将对象加入容器的 spr ...
- socket编程之时间回射服务器
使用到的函数: // 返回值:读到的字节数,若已到文件尾,返回0:若出错,返回-1 ssize_t read(int fd, void *buf, size_t nbytes); // 返回值:若成功 ...
- IDEA2020版使用
idea2020版本出来了,不知道小伙伴使用了吗?是不是还在为激活而烦恼呢?我来给小伙伴解决烦恼了,直接上硬货,解决方法我是在B站找到,所以分享出来! 1.直接进IDEA官网下载最近的idea,官网连 ...
- 201771030117-祁甜 实验一 软件工程准备—<阅读《现代软件工程——构建之法》提出的三个问题>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...