HDU 1281 棋盘游戏(最大二分匹配)
来源:互联网 发布:mysql创建唯一索引 编辑:程序博客网 时间:2024/04/29 04:54
还是一样,熟悉模板!然后就是先这个样的题目,同一行活同一列只能有一个子的题目,可以用二分匹配来做,也就是每一行只能陪一列,不能重复!
这道题,也是一个一个点试出来的,看看有没有等价边!
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int const N = 110;int n, m, k, g[N][N];int cx[N], cy[N];bool used[N];int dfs( int u ) { for ( int v = 1; v <= m; ++v ) if ( g[u][v] && !used[v] ) { used[v] = true; if ( cy[v] == -1 || dfs(cy[v]) ) { cy[v] = u; cx[u] = v; return true; } } return false;}int match(){ int res = 0; memset(cx, -1, sizeof(cx)); memset(cy, -1, sizeof(cy)); for ( int i = 1; i <= n; ++i ) { memset( used, 0, sizeof(used)); if ( dfs(i) ) res++; } return res;}int main(){ int icase = 1; while ( scanf("%d%d%d", &n, &m, &k) == 3 ) { memset(g, 0, sizeof(g)); while (k--) { int u, v; scanf("%d%d", &u, &v); g[u][v] = 1; } int ans = match(), res = 0; for ( int i = 1; i <= n; ++i ) for ( int j = 1; j <= m; ++j ) { if ( g[i][j] == 1 ) { g[i][j] = 0; if ( ans > match() ) res++; g[i][j] = 1; } } printf("Board %d have %d important blanks for %d chessmen.\n", icase++, res, ans); }}
- HDU 1281 棋盘游戏(最大二分匹配)
- HDU 1281 棋盘游戏(匈牙利算法 二分最大匹配)
- hdu 1281 棋盘游戏(枚举,二分图最大匹配)
- hdu 1281 棋盘游戏 (二分图最大匹配)
- hdu 1281 棋盘游戏 (二分匹配)
- hdu 1281 棋盘游戏(二分匹配)
- HDU 1281 棋盘游戏(二分匹配)
- hdu 1281 棋盘游戏(最大匹配)
- hdu 1281 棋盘游戏 二分图最大匹配
- HDU 1281 棋盘游戏 (二分图的最大匹配)
- HDU 1281 棋盘游戏 二分图最大匹配 + 枚举
- HDU 1281 棋盘游戏(二分图最大匹配:关键边)
- HDU 1281 棋盘游戏 二分图的最大匹配
- hdu 1281 棋盘游戏 二分图最大匹配
- HDU 1281 棋盘游戏(二分图最大匹配:关键边)
- HDU ACM 1281 棋盘游戏->二分图最大匹配(匈牙利算法实践)
- HDOJ 1281 棋盘游戏(二分图最大匹配)
- hdu 1281 棋盘游戏 二分图匹配
- 访问图像像素的一些方法
- cross platform compiling
- 简单的实现UIpicker上面的取消确定按钮
- asp:LinkButton的使用
- 在用JQuery做简单弹出层效果时遇到的问题及解决办法
- HDU 1281 棋盘游戏(最大二分匹配)
- 实现数据结构Hash表
- GDB调试精粹及使用实例
- android端的断点续传的实现
- 递归的全排列去重算法
- Cstyle的UEFI导读之ATA Driver Stack
- 调用iframe两个子页面js的方法,分别获得数组,拆分数组,拼接一定规则的字符串,用ajax传到后台,
- Qt之实现360安全卫士主界面(一)
- Jackson简明实例