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. Mono for Android for Visual Studio 2010安装及试用

    安装 Mono for Android for Visual Studio 2010 需要下面4个步骤: 1.安装 JDK 下载并安装 Java 1.6 (Java 6) JDK. 2.安装 Andr ...

  2. [转载] C++ namespaces 使用

    原地址:http://blog.sina.com.cn/s/blog_986c99d601010hiv.html 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同 ...

  3. Linux日常命令使用记录

    scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入. 在服务器104.238.161.75上操作,将服务器 ...

  4. subset子集全排序问题

    思路一 可以用递推的思想,观察S=[], S =[1], S = [1, 2] 时解的变化. 可以发现S=[1, 2] 的解就是 把S = [1]的所有解末尾添上2,然后再并上S = [1]里面的原有 ...

  5. 如何下载网页上的视频 并且 flv 格式转化成 MP4

    链接:http://www.jb51.net/softjc/222135.html https://jingyan.baidu.com/article/25648fc162f2899190fd0042 ...

  6. ASP Session 对象

    http://www.w3school.com.cn/asp/asp_sessions.asp

  7. Spark JavaRDD、JavaPairRDD、Dataset之间的相互转换

    主要内容: 1. JavaRDD to JavaPairRDD 2. Dataset to JavaPairRDD 3. JavaPairRDD to JavaRDD 4. JavaRDD to Da ...

  8. x-boot

    https://github.com/Exrick/x-boot-front https://gitee.com/Exrick/x-boot

  9. JavaWeb学习笔记(一)—— Http协议

    一.什么是HTTP协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览 ...

  10. C++_标准模板库STL概念介绍4-算法

    STL包含很多处理容器的非成员函数: sort() copy() find() random_shuffle() set_union() set_intersection() set_differen ...