HDU2819
2024-08-27 06:46:46
题目链接: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 ;
}
最新文章
- 《Linux内核设计与实现》读书笔记 第一、二章
- canvas 的一些效果
- WordPress基础:极简安装教程
- 深入理解abstract class和interface(转)
- Codeforces Round #245 (Div. 1) B. Working out (简单DP)
- Android重构篇——项目架构篇
- C/C++ Volatile关键词深度剖析(转)
- 几个大型网站的Feeds(Timeline)设计简单对比
- Linux Curl命令
- laravel5 项目上线后务必将开发环境更改为生产环境
- Leetcode 714 - Node
- js验证前后密码是否一致,为什么当我输入不一致密码时,不会弹出警告啊
- [Oracle]坏块处理:确认坏块的对象
- Revit API遍历系统族布置喷头
- vue2.0路由-适合刚接触新手简单理解
- df and du
- [C# | XML] XML 反序列化解析错误:<;xml xmlns=&#39;&#39;>; was not expected. 附通用XML到类解析方法
- python2.x和3.x的区别(不定时更新)
- (总结)MySQL自带的性能压力测试工具mysqlslap详解
- Dell服务器iDrac口默认账号密码和IP
热门文章
- 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
- 打造更好用的 EF 自动审计
- 浅谈 Objective-C Associated Objects
- 日日算法:Dijkstra算法
- 用数据说话,R语言有哪七种可视化应用?
- log4net进阶手札(二):基本用法
- 原生JS设计轮播图
- 自动安装带nginx_upstream_check_module模块的Nginx脚本
- python(os 模块)
- redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)