HDU-2819-Swap [二分匹配][输出路径]
题目传送门
题意:给定一个只有0 1的矩形,问能否通过交换行列使对角线上的数全为1,如果可以输出交换的路径。
思路:首先通过匈牙利算法算出最大匹配,如果最大匹配数不等于矩阵的行数,则必然不会成功。只交换行,或者只交换列都可以交换出来。
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>using namespace std;int n;
bool path[110][110];
bool used[110];
int match[110];
bool Dfs(int x)
{for (int i = 1; i <= n; i++){if (!used[i] && path[x][i]){used[i]=1;if (!match[i] || Dfs(match[i])){match[i] = x;return true;}}}return false;
}
int Matching()
{int ans = 0;memset(match,0, sizeof(match));for (int i = 1; i <= n; i++){memset(used, false, sizeof(used));if (Dfs(i)){ans++;}}return ans;
}
int main(void)
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);while (~scanf("%d", &n)){memset(path, false, sizeof(path));for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){int x;scanf("%d", &x);path[i][j] = x;}}int ans = Matching();if (ans!=n){printf("-1\n");continue;}int L[110], R[110];int cnt=0;for (int i = 1; i <= n; i++){if (match[i] != i){for (int j = 1; j <= n; j++){if (i==match[j]){L[cnt] = i;R[cnt] = j;cnt++;swap(match[i], match[j]);break;}}}}printf("%d\n", cnt);for (int i = 0; i < cnt; i++)printf("C %d %d\n", L[i], R[i]);}return 0;
}
HDU-2819-Swap [二分匹配][输出路径]相关推荐
- hdu 1281棋盘游戏(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格 ...
- 牛客练习赛30: D. 消消乐(二分匹配+输出最小点覆盖)
链接:https://ac.nowcoder.com/acm/contest/216/D 来源:牛客网 题目描述 r神在和小b比赛玩一个名为"消消乐"的游戏,在一个n*m的棋盘上, ...
- HDU - 2819 Swap(二分图完备匹配+路径输出)
题目链接:点击查看 题目大意:给出一个n*n的01矩阵,问能否通过数次交换行和列,使得主对角线上的值全部为1 题目分析:因为对角线上的每个元素都对应着不同的一行和一列,换句话说,如果有解,那么肯定可以 ...
- HDU 2819 Swap(二分图匹配)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2819 [题目大意] 给出一个棋盘,由白格子和黑格子组成,可以交换棋盘的行列, 使得其主对角线为黑格 ...
- hdu 1281 棋盘游戏 (二分匹配)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- SGU 286 Ancient decoration(Euler路径+二分匹配)
http://acm.sgu.ru/problem.php?contest=0&problem=286 先找欧拉回路,再做二分匹配,输出匹配 有一道题和这个很像:HDU 3551 Hard P ...
- 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...
[题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个 顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何 ...
- hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1054 简单二分匹配,根据题意构造一个无向图.然后求最小点覆盖,然后扫描mark数组将曾经匹配的点所匹配 ...
- HDU 5943 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)
题意:给你一张二分图,左边是s+1到s+n这n个数,右边是1到n这n个数 如果x在左边,y在右边,且x%y==0,那么x可以和y匹配,问这个二分图是否存在完美匹配 如果左边有两个以上的质数出现,那么一 ...
最新文章
- Product Orders(生产订单)状态相关函数BAPI
- 安装工程造价课程设计_造价课程设计.docx
- 《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希
- django 转发_教你搭建Django环境,就是这么简单
- 坑 之 Tensor XXX must be from the same graph as Tensor XXX
- 【Python CheckiO 题解】Army Battles
- excel二极管伏安特性曲线_【刘敏蔷老师】半导体二极管的原理及应用
- 玩大了!别再埋头学Python了,它真的无用!
- Dajngo之ajax(get和post)请求(亲测)
- Eclipse-Git
- 访问不了_etherscan访问不了的替代方案
- mysql 索引重复 更新_MySQL——ON DUPLICATE KEY UPDATE添加索引值实现重复插入变更update...
- Tkinter模块GUI界面化编程实战(三)——2048小游戏(含详解及完整源码、完整程序下载链接)
- 第1期——WLAN定义和基本架构
- OperationTrident游戏开发总结
- Unity 图片字体制作
- 电子海图开发第四十七篇 GPS数据解析(共一百篇)
- Solidity众筹案例
- Jupyter Notebook,day1 2019.3.25
- 【研究报告】2021奢侈品营销启示录——附下载链接