Description

小 希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是 Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。
所以现在
Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量
多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解
决这个问题么?

Input

输入包含多组数据,
第一行有三个数N、M、K(1<N,M<=100 1<K<=N*M),表示了棋盘的高、宽,以及可以放“车”的格子数目。接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。

Output

对输入的每组数据,按照如下格式输出:
Board T have C important blanks for L chessmen.

Sample Input

3 3 4
1 2
1 3
2 1
2 2
3 3 4
1 2
1 3
2 1
3 2

Sample Output

Board 1 have 0 important blanks for 2 chessmen.
Board 2 have 3 important blanks for 3 chessmen.

Source

HDOJ

如果棋盘上的某一个点可以放棋子,那么说明棋盘的行和列是一对匹配。

先求出棋盘的最大匹配数量。之后的话删点。

为了节约时间,只要删除增广路上该点所对应的一条路径就可以了,然后再进行匹配。但是如果该点j是未盖点,也不能修改j所对应的项。

 #include <stdio.h>
#include <string.h>
#define MAX 102
using namespace std; int n,m,k;
int flag_x,flag_y;
short xMAP[MAX];
short yMAP[MAX];
bool flag[MAX];
bool map[MAX][MAX]; int dfs(int u, bool f){
for(int v=; v<m; v++){
if(map[u][v] && !flag[v]){
flag[v]=;
if(yMAP[v]==- || dfs(yMAP[v] ,f)){
if(f)yMAP[v]=u,xMAP[u]=v;
return ;
}
}
}
return ;
} int hungary(){
int res=;
bool f=;
memset(xMAP,0xff,sizeof(xMAP));
memset(yMAP,0xff,sizeof(yMAP));
for(int u=; u<n; u++){
if(xMAP[u]==-){
memset(flag,,sizeof(flag));
if(dfs(u,f)){
res++;
}
}
}
return res;
} bool judge(){
bool f=;
for(int u=; u<n; u++){
if(xMAP[u]==-){
memset(flag,,sizeof(flag));
if(dfs(u,f))return ;
}
}
return ;
} int main(int argc, char *argv[])
{
int t=;
while( scanf("%d %d %d",&n,&m,&k)!=EOF ){
t++;
memset(map,,sizeof(map));
int x,y;
for(int i=; i<k; i++){
scanf("%d %d",&x,&y);
map[--x][--y]=;
}
int max=hungary();
int ans=;
for(int tx=; tx<n; tx++){
int ty=xMAP[tx];
if(ty!=-){
map[tx][ty]=;
xMAP[tx]=-;
yMAP[ty]=-;
if(!judge())ans++;
xMAP[tx]=ty;
yMAP[ty]=tx;
map[tx][ty]=;
}
}
printf("Board %d have %d important blanks for %d chessmen.\n",t,ans,max);
}
return ;
}

TOJ 2733 棋盘游戏的更多相关文章

  1. TOJ 2776 CD Making

    TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性...  贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...

  2. BZOJ 2733 & splay的合并

    题意: 带权联通块,添边与查询联通块中第k大. SOL: splay合并+并查集. 我以为splay可以用奇技淫巧来简单合并...调了一下午终于幡然醒悟...于是就只好一个一个慢慢插...什么启发式合 ...

  3. HD1281棋盘游戏(匹配+好题)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. hdu------1281 棋盘游戏(最小覆盖点)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. hdu 1281 棋盘游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. 【BZOJ】【2733】【HNOI2012】永无乡

    平衡树+启发式合并+并查集 因为要求一坨数中第k大的……用平衡树会很好维护…… 但又要求连通块?所以用并查集来维护…… 大概就是让并查集的fa和Treap的根是同一个节点吧…… TLE了N多发,可能是 ...

  7. BZOJ 2733: [HNOI2012]永无乡 启发式合并treap

    2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  8. 洛谷P1117 棋盘游戏

    洛谷1117 棋盘游戏 题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子.现在给出一个初始棋盘和一个最终棋盘,要 ...

  9. bzoj 2733: [HNOI2012]永无乡 离线+主席树

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1167  Solved: 607[Submit][Status ...

随机推荐

  1. 【转】android中layout_weight的理解

    android Layout_weight的理解 SDK中的解释: Indicates how much of the extra space in the LinearLayout will be ...

  2. php统计目录大小

    function dirSize($directroy) { $dir_size=0; $dir_handle = @opendir($directroy); if($dir_handle) { wh ...

  3. Python 集合set()添加删除、交集、并集、集合操作详解

    集合:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.每个元素的地位都是相同的,元素之间是无序的. 创建集合set python set类是在python的sets模块中,大家现在使 ...

  4. Permission denied: .gvfs

    $ sudo umount /home/william/.gvfs $ rm -rf ~/.gvfs/ Reference: (Permission denied: .gvfs)[https://an ...

  5. ueditor的bug

    1)过滤script style标签ueditor.all.jsallowDivTransToP:false ueditor.config.js,allowDivTransToP:false //允许 ...

  6. [Swift实际操作]九、完整实例-(3)创建和安装开发证书、发布证书及开发证书配置文件、发布证书配置文件

    本文将为你演示,如何创建开发证书和发布证书,以及其他辅助内容.首先打开浏览器,进入[苹果开发者网站]输入[Apple ID]和[密码],点击登录按钮,进入开发者管理后台. 点击左侧的[Membersh ...

  7. 'javac' 不是内部或外部命令,也不是可运行的程序

    win10 系统下'javac' 不是内部或外部命令,也不是可运行的程序 1.在系统变量下面配置 JAVA_HOME:你自己的jdk的路径 CLASSPATH= .;%JAVA_HOME%libdt. ...

  8. SDUT OJ 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  9. js 的常用选择器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. SQL里的real类型和tinyint类型在C#里分别对应类型