http://acm.hdu.edu.cn/showproblem.php?pid=2819

这道题乍一看是矩阵变换题,估计用矩阵之类的也可以做

但是分析一下就可以知道

要凑成对角线都是1,题目允许行变换和列变换

然而观察可以得知如果可以完成只需要行变换或者列变换之一即可

donser[i][j]=1表示i,j位置有1,那么只需要变换j到i(即交换i,j行)

输出中间过程用queue

加上dfs遍历即可

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int donser[][];
bool used[];
int leave[],a[],b[];
int M,num,abc,j;
queue<int >que;
void swap(int i,int j)
{
int t=leave[i];leave[i]=leave[j];leave[j]=t;
}
int dfs(int x)
{
for(int i=;i<=M;i++)
{
if(donser[x][i]&&!used[i])
{
used[i]=true;
if(!leave[i]||dfs(leave[i]))
{
leave[i]=x;
return ;
} }
}
return ;
}
int main()
{
while(~scanf("%d",&M))
{
memset(donser,,sizeof(donser));
memset(leave,,sizeof(leave));
for(int i=;i<=M;i++)
{
for(j=;j<=M;j++)
{
scanf("%d",&num);
if(num) {donser[i][j]=;}
}
}
num=abc=;
for(int i=;i<=M;i++)
{
memset(used,,sizeof(used));
if(dfs(i)){abc++;}
}
if(abc!=M) {cout<<"-1"<<endl;continue;}
abc=,j=;
for(int i=;i<=M;i++)
{
for(j=;j<=M && leave[j]!=i ;j++);
if(i!=j)
{
abc++;
que.push(i);
que.push(j);
swap(i,j);
}
}
cout<<abc<<endl;
while(!que.empty())
{
cout<<"C "<<que.front();
que.pop();
cout<<" "<<que.front()<<endl;
que.pop();
}
abc=;
}
return ;
}

HDU 2819 隐式二分图匹配的更多相关文章

  1. HDU 2819 Swap(二分图匹配)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2819 [题目大意] 给出一个棋盘,由白格子和黑格子组成,可以交换棋盘的行列, 使得其主对角线为黑格 ...

  2. Android隐式启动匹配:action,category,data

    简介 Android开发中,Activity,Service 和 BroadcastReceiver 启动有两种方式,显示启动和隐式启动. 为方便下面描述,我以Activity启动为例. 显示启动便是 ...

  3. HDU 1083 网络流之二分图匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...

  4. hdu 5727 Necklace dfs+二分图匹配

    Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...

  5. HDU 5727 Necklace(二分图匹配)

    [题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5727 [题目大意] 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环,已知有些阴珠子和阳 ...

  6. Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件

    一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...

  7. hdu 5943(素数间隔+二分图匹配)

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  8. HDU 5727 - Necklace - [全排列+二分图匹配][Hopcroft-Karp算法模板]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5727 Problem DescriptionSJX has 2*N magic gems. ...

  9. hdu - 1150 Machine Schedule (二分图匹配最小点覆盖)

    http://acm.hdu.edu.cn/showproblem.php?pid=1150 有两种机器,A机器有n种模式,B机器有m种模式,现在有k个任务需要执行,没切换一个任务机器就需要重启一次, ...

随机推荐

  1. Centos: 修改 yum安装的mysql路径

    1.使用命令service mysqld stop 停止mysql查看mysql数据库的默认路径:/var/lib/mysql使用cp -afir  /var/lib/mysql/*   /usr/l ...

  2. scrapy3_ 安装指南

    安装指南 安装Scrapy 注解 请先阅读 平台安装指南. 下列的安装步骤假定您已经安装好下列程序: Python 2.7 Python Package: pip and setuptools. 现在 ...

  3. 10月21日下午PHP常用函数

    函数四要素:返回类型  函数名  参数列表  函数体 //最简单的函数定义方式 function Show() { echo "hello"; } Show();//输出结果为he ...

  4. Object Graph Serialization

    http://coding-time.blogspot.com/2008/03/serialize-object-graph-to-xml-in-net.html http://trycatch.me ...

  5. Android Studio-设置快速转换局部变量为成员变量

    "File"-"Settings"-"KeyMap"-"Main Menu"-"Refactor"- ...

  6. Linux动态库的编译与使用 转载

    http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html Linux下的动态库以.so为后缀,我也是初次在Linux下 ...

  7. vim如何在多个文件中切换

    如果我们一次打开多个文件 看一下当前目录里面的文件: wangkongming@Vostro /data/webroot/testRoot/application/modules/Admin/view ...

  8. oracle 中的dual表简介与用法

    Dual表是每个数据库创建时默认生成的,该表仅有一列一行. 1)分析dual表执行,如下:

  9. .Net Core 之 图形验证码

    本文介绍.Net Core下用第三方ZKWeb.System.Drawing实现验证码功能. 通过测试的系统: Windows 8.1 64bit Ubuntu Server 16.04 LTS 64 ...

  10. 谈谈我眼中的CSDN吧

    昨天逛博客园看到了这篇曝光率很高的文章:博客搬家——从CSDN到博客园,一篇短短的文章竟然招致这么多人的讨论,可能程序员就喜欢“Java好还是PHP好”这类型的问题吧,好无聊.由于我一直在使用CSDN ...