HDU2819【二分匹配与矩阵的秩】
题意:
给出一个矩阵问能否实现对角线全部是1,能的话输出路径,不能的话输出-1
思路:
首先根据矩阵的性质,这一定是一个满秩矩阵,所以只根据行或列交换就一定能实现。
所以行和列构成二分图,然后跑一发匈牙利就知道行不行。
然后怎么输出交换的步骤呢,我们只考虑列交换的话,在对于数组cy[ ]也就是存列的配对对象的数组,对于每个列可以寻找哪个列配对的行是等于他的,因为对角线上行等于列。
如果等于他,而且这个列就是本身他的列,那么这样就好了,如果不是的话就要交换,达到目的,那么还要处理,因为一旦交换他们配对的行就变了。
- #include<bits/stdc++.h>
- using namespace::std;
- typedef pair<int,int> PII;
- const int N = 1e2+10;
- PII swp[1010];
- bool rel[N][N];
- bool vis[N];
- int cy[N],cx[N];
- int n;
- bool FindPath(int u)
- {
- for(int v=1;v<=n;v++)
- {
- if(vis[v]) continue;
- if(rel[u][v])
- {
- vis[v]=1;
- if(cy[v]==-1||FindPath(cy[v]))
- {
- cx[u]=v;
- cy[v]=u;
- return true;
- }
- }
- }
- return false;
- }
- int main()
- {
- while(~scanf("%d",&n))
- {
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- scanf("%d",&rel[i][j]);
- int ans=0;
- memset(cx,-1,sizeof(cx));
- memset(cy,-1,sizeof(cy));
- for(int i=1;i<=n;i++)
- {
- if(cx[i]==-1){
- memset(vis,0,sizeof(vis));
- if(FindPath(i))
- ans++;
- }
- }
- if(ans==n)
- {
- int num=0;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- {
- if(cy[j]==i)
- {
- if(i!=j)
- {
- swp[num].first=i;swp[num].second=j;
- swap(cy[i],cy[j]);
- num++;
- }
- break;
- }
- }
- }
- printf("%d\n",num);
- for(int i=0;i<num;i++)
- printf("C %d %d\n",swp[i].first,swp[i].second);
- }
- else
- puts("-1");
- }
- return 0;
- }
HDU2819【二分匹配与矩阵的秩】的更多相关文章
- hdu-2819.swap(二分匹配 + 矩阵的秩基本定理)
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- [kuangbin带你飞]专题十 匹配问题 二分匹配部分
刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...
- POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24081 Accepted: 106 ...
- BZOJ 1189 二分匹配 || 最大流
1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1155 Solved: 420[Submi ...
- Kingdom of Obsession---hdu5943(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...
- poj 2060 Taxi Cab Scheme (二分匹配)
Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5710 Accepted: 2393 D ...
- [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)
Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...
- [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)
描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...
随机推荐
- 嵌入式开发之cgic库---cgi库的使用
很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作 ...
- java集合类学习心得
java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...
- var与变量提升
var是否可以省略 一般情况下,是可以省略var的,但有两点值得注意: 1.var a=1 与 a=1 ,这两条语句一般情况下作用是一样的.但是前者不能用delete删除.不过,绝大多数情况下,这种差 ...
- Machine Learning in Action(7) 回归算法
按照<机器学习实战>的主线,结束有监督学习中关于分类的机器学习方法,进入回归部分.所谓回归就是数据进行曲线拟合,回归一般用来做预测,涵盖线性回归(经典最小二乘法).局部加权线性回归.岭回归 ...
- const与define应用上该怎么取舍
const与define应用上该怎么取舍 #define WYB 100; const float WYB = 100; define是在预编译的时候展开替换的,const是编译运行阶段使用 defi ...
- 对于URL中文和特殊字符的处理方法
1.中文的处理方法 NSString* string1 = @"https://www.cloudsafe.com/文件夹"; NSString* string2 = [strin ...
- leetcode 750. Number Of Corner Rectangles
Given a grid where each entry is only 0 or 1, find the number of corner rectangles. A corner rectang ...
- [bzoj 1449] 球队收益(费用流)
[bzoj 1449] 球队收益(费用流) Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 1 ...
- ubuntu下安装android模拟器genymotion【转】
本文转载自:http://www.jianshu.com/p/e6062ebb8fc9 去genymotion下载对应的安装包genymotion-2.4.0_x64.bin sudo ./genym ...
- 2U网络机箱的尺寸是多少,4U网络机箱的尺寸是多少
厚度以4.445cm为基本单位.1U就是4.445cm,2U则是1U的2倍为8.89cm.48.26cm=19英寸,如果是标准的机架式设备,宽应该是满足这个标准的.纵深的话 有600mm或者800mm ...