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. 电脑中的Bois是什么

    电脑中的Bois是什么 BOIS= Basic Input/Output System,基本输入输出系统,全称是ROM-BOIS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电 ...

  2. ubuntu 重启 nginx 失败,* Restarting nginx nginx ...fail!

    ubuntu 重启 nginx 失败,* Restarting nginx nginx ...fail!       执行 nginx 重启服务时,提示失败如下: $ sudo service ngi ...

  3. css教程

    网址:http://www.aa25.cn/layout/index.shtml

  4. live555编译、移植

    1.windows下编译 转 http://www.cnblogs.com/skyseraph/archive/2012/04/11/2442840.html 2.linux下编译,以及交叉编译,海思 ...

  5. sufeinet

    http://www.sufeinet.com http://tool.sufeinet.com/

  6. [问题] UISearchBar 点击取消后跳动的问题

    问题详情: 首先是TableView 作为 NavigationController 的 RootViewContrller, 然后UISearchBar   添加到TableView 的 headV ...

  7. yii2 登录、退出、自动登录

    自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月. 在下 ...

  8. Mysql表分区几种方式

    自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...

  9. char,short ,int ,long,long long,unsigned long long数据范围

    from:http://www.cnblogs.com/A123456A/archive/2013/01/25/2876634.html char,short ,int ,long,long long ...

  10. addEventListener和on的区别

    为什么需要addEventListener? 先来看一个片段: html代码 <div id="box">追梦子</div> 用on的代码 1 window ...