题意:是否能使对角线上全是1 ,这个简单直接按行列匹配。难在路径的输出,我们知道X,Y左右匹配完了之后,不一定是1–1,2–2,3–3……这种匹配。可能是1–3,2–1,3–2,我们要把他们交换成前一种的匹配形式,也就是路径的答案,再有矩阵的一些关于秩的性质。行变换和列变换是等价的。


#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<string>
#include<cstring>
#include<stack>
#include<queue>
#include<vector>
#include<cstdlib>
#define lson (rt<<1),L,M
#define rson (rt<<1|1),M+1,R
#define M ((L+R)>>1)
#define cl(a,b) memset(a,b,sizeof(a));
#define LL long long
#define P pair<int,int>
#define X first
#define Y second
#define pb push_back
#define fread(zcc) freopen(zcc,"r",stdin)
#define fwrite(zcc) freopen(zcc,"w",stdout)
using namespace std;
const int maxn=105;
const int inf=999999; vector<int> G[maxn];
int matching[maxn];
bool vis[maxn];
int Nx;
int dfs(int u){
int N=G[u].size();
for(int i=0;i<N;i++){
int v=G[u][i];
if(vis[v])continue;
vis[v]=true;
if(matching[v]==-1||dfs(matching[v])){
matching[v]=u;
return 1;
}
}
return 0;
}
int hungar(){
int ans=0;
cl(matching,-1);
for(int i=0;i<Nx;i++){
cl(vis,false);
ans+=dfs(i);
}
return ans;
}
int Left[maxn],Right[maxn];
int main(){ int n;
while(~scanf("%d",&n)){
for(int i=0;i<maxn;i++)G[i].clear();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int x;
scanf("%d",&x);
if(x)G[i].pb(j);
}
}
Nx=n;
int ans=hungar();
if(ans<n){
puts("-1");
continue;
} int num=0;
for(int i=0;i<n;i++){//查找路径
int j;
for(j=i;j<n;j++)if(matching[j]==i)break;
if(i!=j){
Left[num]=i;Right[num++]=j;
swap(matching[i],matching[j]);
}
}
printf("%d\n",num);
for(int i=0;i<num;i++){
printf("C %d %d\n",Left[i]+1,Right[i]+1);
}
}
return 0;
}

最新文章

  1. python定时重跑获取数据
  2. Atitit 编程语言常用算法attilax总结
  3. [python拾遗]文件操作
  4. 在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
  5. volley post非json格式数据并获取json数据
  6. ArcGIS Server 创建站点失败
  7. java post请求
  8. 浅谈DEs,AES
  9. 浅析Netty的异步事件驱动(一)
  10. VM11里安装ubuntukylin-16.04-desktop-amd64遇到问题
  11. python2.7 串口操作方式 编译 .py为windows可运行exe文件
  12. Thrift项目Server端开发流程
  13. Google云平台技术架构
  14. linux命令学习汇总
  15. Python内置函数(47)——vars
  16. ABP中的Filter(下)
  17. webpack2入门概念
  18. linux 标准输入输出 重定向
  19. FJOI2019游记
  20. IOS AES加密之ECB128模式

热门文章

  1. 【SQL】约束与触发器1
  2. 网站js埋点
  3. mysql之any,some all(zz)
  4. css样式表中的样式覆盖顺序(转)
  5. laravel将数据库对象转为数组的方法
  6. 正则表达式筛选出jpg、png的图片url
  7. 【转】python 生成器和迭代器有这篇就够了
  8. (14)python 文件和流
  9. uva11168
  10. 10.4(java学习笔记)CLOB,BLOB基本操作