题意:

给出一个矩阵问能否实现对角线全部是1,能的话输出路径,不能的话输出-1

思路:

首先根据矩阵的性质,这一定是一个满秩矩阵,所以只根据行或列交换就一定能实现。

所以行和列构成二分图,然后跑一发匈牙利就知道行不行。

然后怎么输出交换的步骤呢,我们只考虑列交换的话,在对于数组cy[ ]也就是存列的配对对象的数组,对于每个列可以寻找哪个列配对的行是等于他的,因为对角线上行等于列。

如果等于他,而且这个列就是本身他的列,那么这样就好了,如果不是的话就要交换,达到目的,那么还要处理,因为一旦交换他们配对的行就变了。

  1. #include<bits/stdc++.h>
  2. using namespace::std;
  3. typedef pair<int,int> PII;
  4.  
  5. const int N = 1e2+10;
  6.  
  7. PII swp[1010];
  8. bool rel[N][N];
  9. bool vis[N];
  10. int cy[N],cx[N];
  11. int n;
  12.  
  13. bool FindPath(int u)
  14. {
  15. for(int v=1;v<=n;v++)
  16. {
  17. if(vis[v]) continue;
  18. if(rel[u][v])
  19. {
  20. vis[v]=1;
  21. if(cy[v]==-1||FindPath(cy[v]))
  22. {
  23. cx[u]=v;
  24. cy[v]=u;
  25. return true;
  26. }
  27. }
  28. }
  29. return false;
  30. }
  31.  
  32. int main()
  33. {
  34. while(~scanf("%d",&n))
  35. {
  36. for(int i=1;i<=n;i++)
  37. for(int j=1;j<=n;j++)
  38. scanf("%d",&rel[i][j]);
  39.  
  40. int ans=0;
  41. memset(cx,-1,sizeof(cx));
  42. memset(cy,-1,sizeof(cy));
  43. for(int i=1;i<=n;i++)
  44. {
  45. if(cx[i]==-1){
  46. memset(vis,0,sizeof(vis));
  47. if(FindPath(i))
  48. ans++;
  49. }
  50. }
  51. if(ans==n)
  52. {
  53. int num=0;
  54. for(int i=1;i<=n;i++)
  55. {
  56. for(int j=1;j<=n;j++)
  57. {
  58. if(cy[j]==i)
  59. {
  60. if(i!=j)
  61. {
  62. swp[num].first=i;swp[num].second=j;
  63. swap(cy[i],cy[j]);
  64. num++;
  65. }
  66. break;
  67. }
  68. }
  69. }
  70. printf("%d\n",num);
  71. for(int i=0;i<num;i++)
  72. printf("C %d %d\n",swp[i].first,swp[i].second);
  73. }
  74. else
  75. puts("-1");
  76. }
  77. return 0;
  78. }

HDU2819【二分匹配与矩阵的秩】的更多相关文章

  1. hdu-2819.swap(二分匹配 + 矩阵的秩基本定理)

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  3. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24081   Accepted: 106 ...

  4. BZOJ 1189 二分匹配 || 最大流

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1155  Solved: 420[Submi ...

  5. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  6. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  7. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  8. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  9. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

随机推荐

  1. 嵌入式开发之cgic库---cgi库的使用

    很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作 ...

  2. java集合类学习心得

    java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...

  3. var与变量提升

    var是否可以省略 一般情况下,是可以省略var的,但有两点值得注意: 1.var a=1 与 a=1 ,这两条语句一般情况下作用是一样的.但是前者不能用delete删除.不过,绝大多数情况下,这种差 ...

  4. Machine Learning in Action(7) 回归算法

    按照<机器学习实战>的主线,结束有监督学习中关于分类的机器学习方法,进入回归部分.所谓回归就是数据进行曲线拟合,回归一般用来做预测,涵盖线性回归(经典最小二乘法).局部加权线性回归.岭回归 ...

  5. const与define应用上该怎么取舍

    const与define应用上该怎么取舍 #define WYB 100; const float WYB = 100; define是在预编译的时候展开替换的,const是编译运行阶段使用 defi ...

  6. 对于URL中文和特殊字符的处理方法

    1.中文的处理方法 NSString* string1 = @"https://www.cloudsafe.com/文件夹"; NSString* string2 = [strin ...

  7. 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 ...

  8. [bzoj 1449] 球队收益(费用流)

    [bzoj 1449] 球队收益(费用流) Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 1 ...

  9. ubuntu下安装android模拟器genymotion【转】

    本文转载自:http://www.jianshu.com/p/e6062ebb8fc9 去genymotion下载对应的安装包genymotion-2.4.0_x64.bin sudo ./genym ...

  10. 2U网络机箱的尺寸是多少,4U网络机箱的尺寸是多少

    厚度以4.445cm为基本单位.1U就是4.445cm,2U则是1U的2倍为8.89cm.48.26cm=19英寸,如果是标准的机架式设备,宽应该是满足这个标准的.纵深的话 有600mm或者800mm ...