HDU 1281 棋盘游戏(二分图匹配)
来源:互联网 发布:网络规划设计师视频 编辑:程序博客网 时间:2024/06/10 03:17
题目链接:点击打开链接
思路:经典二分图建图模型, 对于每一个格子, 按照行标建一列, 列标建一列, 然后进行匹配即可, 然后尝试删除每条边, 再进行匹配看看有没有比原匹配小。 复杂度显然会超时。。 数据水了吧。
细节参见代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include<bitset>#include<cstdlib>#include<cmath>#include<set>#include<list>#include<deque>#include<map>#include<queue>#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))using namespace std;typedef long long ll;typedef long double ld;const ld eps = 1e-9, PI = 3.1415926535897932384626433832795;const int mod = 1000000000 + 7;const int INF = 0x3f3f3f3f;// & 0x7FFFFFFFconst int seed = 131;const ll INF64 = ll(1e18);const int maxn = 100 + 10;int T,n,m,k,tot,kase = 0;int use[maxn],from[maxn];bool mp[maxn][maxn];bool match(int x) { for(int i = 1; i <= m; i++) if(!use[i] && mp[x][i]) { use[i] = true; if(from[i] == -1 || match(from[i])) { from[i] = x; return true; } } return false;}int hungary(int n) { tot = 0; memset(from, -1, sizeof(from)); for(int i = 1; i <= n; i++) { memset(use, 0, sizeof(use)); if(match(i)) ++tot; } return tot;}struct node { int r, c;}a[maxn*maxn];int main() { while(~scanf("%d%d%d",&n,&m,&k)) { memset(mp, false, sizeof(mp)); for(int i = 0; i < k; i++) { scanf("%d%d",&a[i].r,&a[i].c); mp[a[i].r][a[i].c] = true; } int init = hungary(n), ans = 0; for(int i = 0; i < k; i++) { mp[a[i].r][a[i].c] = false; int cur = hungary(n); mp[a[i].r][a[i].c] = true; if(cur < init) ++ans; } printf("Board %d have %d important blanks for %d chessmen.\n",++kase,ans,init); } return 0;}
1 0
- 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 1281 棋盘游戏(枚举,二分图最大匹配)
- hdu 1281 棋盘游戏 (二分图最大匹配)
- HDU 1281 棋盘游戏(二分图匹配)
- 错误: Unknown class XXX in Interface Builder file
- Android应用锁之获取栈顶Activity
- SQLServer:定时作业的设置方法
- PHp向文件中写入数据
- 二维RMQ模板
- HDU 1281 棋盘游戏(二分图匹配)
- 独立安装WAMP
- lintcode:Word Break
- C语言多线程编程基础
- Programming Language Rankings——http://githut.info/
- Python -- 字符串大小写转换
- iOS 视频直播
- ExtJS 基础学习-1
- 错误:CGContextSetStrokeColorWithColor: invalid context 0x0