棋盘游戏

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 65536/32768 K (Java/Others)

Problem Description

小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。

所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么?

Input

输入包含多组数据,

第一行有三个数N、M、K(1

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.


解题心得:

  1. 一个二分匹配问题,把行和列单独出来,每一行中该行与可以放棋子的列形成匹配,因为每一行每一列只能放一个棋子,所以就是求一个最大二分匹配
  2. 然后就是求重要位置,刚开始还以为有什么规律,找了半天,真的找不出来,然后跑暴力,枚举每一个可以放棋子点,如果将该点去掉最大匹配变小了,那么这个点就是一个重要点了。很无语…….

#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
vector <int> ve[maxn];
int match[maxn];
bool vis[maxn],maps[maxn][maxn];
int n,m,k; void init()
{
memset(maps,0,sizeof(maps));
memset(match,-1,sizeof(match));
for(int i=0; i<maxn; i++)
ve[i].clear();
for(int i=1; i<=k; i++)
{
int a,b;
scanf("%d%d",&a,&b);
maps[a][b] = true;
ve[a].push_back(b);
}
} bool dfs(int x)
{
for(int i=0; i<ve[x].size(); i++)
{
int v = ve[x][i];
if(!vis[v] && maps[x][v])
{
vis[v] = true;
if(match[v] == -1 || dfs(match[v]))
{
match[v] = x;
return true;
}
}
}
return false;
} int hunger()
{
int sum_chessmen = 0;
for(int i=1; i<=n; i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
sum_chessmen++;
}
return sum_chessmen;
} int main()
{
int t = 1;
while(cin>>n>>m>>k)
{
int ans = 0;
init();
int ans1 = hunger();//先跑一个原本棋盘的二分匹配
for(int i=1;i<=n;i++)
{
for(int j=0;j<ve[i].size();j++)
{
memset(match,-1,sizeof(match));
int y = ve[i][j];
int x = i;
maps[x][y] = false;//枚举去掉每一个本可以放置的点,然后判断是否二分匹配出来的答案变小了
int ans2 = hunger();
maps[x][y] = true;
if(ans2 < ans1)
ans++;
}
}
printf("Board %d have %d important blanks for %d chessmen.\n",t++,ans,ans1);
}
return 0;
}

HDU:4185-棋盘游戏的更多相关文章

  1. HDU 4185 ——Oil Skimming——————【最大匹配、方格的奇偶性建图】

    Oil Skimming Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  2. hdu 1281 棋盘游戏

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

  3. HDU 4185

    http://acm.hdu.edu.cn/showproblem.php?pid=4185 两个挨着的'#'可以配成一对,求最多能配成几对 挨着的'#'就连边,然后求一次最大匹配,答案是最大匹配除以 ...

  4. (匹配)Oil Skimming -- hdu --4185

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4185 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. hdu 1281 棋盘游戏 (二分匹配)

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

  6. hdu 1281 棋盘游戏(二分匹配)

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

  7. HDU 1281——棋盘游戏——————【最大匹配、枚举删点、邻接表方式】

     棋盘游戏 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. hdu 1281棋盘游戏(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281   Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘, ...

  9. HDU 1281 - 棋盘游戏 - [二分图最大匹配]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1281 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  10. HDU 1281 棋盘游戏 【二分图最大匹配】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1281 题意概括: 有N*M大的棋盘,要在里面放尽量多的“车”,求最多能放的车的个数,和为了放最多的车有多 ...

随机推荐

  1. python 3 学习字符串和编码

    字符串和编码 阅读: 895464 字符编码 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字 ...

  2. (转)nginx应用总结(2)--突破高并发的性能优化

    原文:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题. ...

  3. (转)通过MySQL复制线程SQL_Thread加快增量恢复binlog

    数据回档常常是使用全量备份+binlog增量实现的.而数据量很大的情况下,增量恢复binlog一直是一个苦恼的问题,因为恢复binlog速度十分慢,并且容易出错. 恢复binlog文件一般有两种方法: ...

  4. [干货分享]AXURE整套高保真UI框架和元件组(白色风格)

      写在前面 强烈建议开始之前阅读以下第一篇高保真UI框架的前面部分,以了解设计思想,这篇文章不再重复介绍: AXURE-整套可复用的高保真元件和框架之暗黑风格 本次共享模板的UI规范 注:由于篇幅问 ...

  5. 快速开启MySQL慢日志查询的方法

    MySQL慢日志查询对于很多刚接触MySQL数据的新人来说比较陌生,下面就为您介绍MySQL慢日志查询的用法和好处,供您参考.  mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是 ...

  6. Webstorm 激活

    注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址: http://idea.iteblog.com/key.php 点击:Acti ...

  7. Eclipse - 安装语言包

    Open the install wizard with 'Help' > 'Install new software...' add the Babel p2 repository: http ...

  8. 如何优化Mysql执行查询数据的速度

    在项目中数据量小的情况下使用like查询速度还行,但是随着数据一天一天增加,再使用like进行模糊查询的时候速度上就会显得比较慢,现提供两套解决方案: 问题: 使用like查询效率很慢 select ...

  9. 原创 html动态表格

    <table id="opttb"> <asp:Repeater ID="tempOptions" runat="server&qu ...

  10. iOS 应用架构 (二)

    iOS 客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答 iOS 应用架构中的种种问题,本文是其中的第二篇,主要讲 View 层的组织和调用方案.上篇主要讲 View ...