hdu1281 棋盘游戏 --- 最大匹配
给一个矩形棋盘,上面有一些空格点,能够放象棋中的“车”,
现给出空格的坐标,求最多能够放多少个“车”使他们互不攻击(依据象棋规则,每行每列至多仅仅能放一个),
还要求有几个“车”是必须选择的。
由于每行每列仅仅能放一个。所以不能有冲突的x或y坐标。既把x和y分为二分图的两个集合。要求最大匹配。
至于有多少个必须选择的。我们能够枚举最大匹配中的每一个匹配,(一个匹配相当于一个坐标嘛),去掉该匹配之后再求一边最大匹配比較就可以。
这里我为了方便写。直接枚举了全部给出的点。
。事实上把最大匹配中的匹配存下来。枚举应该更好一点把
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
const int maxn=105;
using namespace std; int mx[maxn],my[maxn],vis[maxn],e[maxn][maxn],nx,ny; int path(int i)
{
int j;
for(j=1;j<=ny;j++)
{
if(e[i][j]&&!vis[j])
{
vis[j]=1;
if(my[j]==-1||path(my[j]))
{
my[j]=i;
mx[i]=j;
return 1;
}
}
}
return 0;
} int hungry()
{
int res=0;
memset(mx,-1,sizeof mx);
memset(my,-1,sizeof my);
for(int i=1;i<=nx;i++)
{
if(mx[i]==-1)
{
memset(vis,0,sizeof vis);
res+=path(i);
}
}
return res;
} int main()
{
int k,a,b,i,j,cnt,ans,T=1;
while(~scanf("%d%d%d",&nx,&ny,&k))
{
memset(e,0,sizeof e);
while(k--)
{
scanf("%d%d",&a,&b);
e[a][b]=1;
}
ans=hungry();
cnt=0;
for(i=1;i<=nx;i++)
{
for(j=1;j<=ny;j++)
{
if(e[i][j])
{
e[i][j]=0;
if(hungry()<ans) cnt++;
e[i][j]=1;
}
}
}
printf("Board %d have %d important blanks for %d chessmen.\n",T++,cnt,ans);
}
return 0;
}
hdu1281 棋盘游戏 --- 最大匹配的更多相关文章
- HDU1281 棋盘游戏 —— 二分图最大匹配 + 枚举
题目链接:https://vjudge.net/problem/HDU-1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- hdu-1281.棋盘游戏(二分图匹配 + 二分图关键点查询)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 棋盘游戏---hdu1281(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 题目大意:就是车和车之间不能发生攻击.还有一部分位置不可以放置棋子. 解题思路:一行一列 ...
- hdu1281 棋盘游戏 二分图最大匹配
小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决 ...
- hdu------1281 棋盘游戏(最小覆盖点)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Hdu1281 棋盘游戏
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu1281(棋盘游戏,车的放置)
Problem Description 给定一个n * m的棋盘,在棋盘里放尽量多的国际象棋中的车,使他们不能相互攻击 已知有些格子不能放置,问最多能放置多少个车 并计算出必须棋盘上的必须点. Inp ...
- hdu1281棋盘游戏
Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只 ...
- hdu1281+hdu2819(最大匹配数)
分析:将行和列缩点,即行对应二分图的X部,列对应二分图的Y部,然后交点为连接该行和该列的一条边.匹配时每点都会把整行整列占了,因此就不会出现冲突了. 传送门:hdu1281 棋盘游戏 #include ...
随机推荐
- hibernate 管理 Session(单独使用session,非spring)
Hibernate 自身提供了三种管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 Session 对象的生命周期与 JTA 事务绑定 Hibernate 托付程序管理 ...
- FOJ题目Problem 2082 过路费 (link cut tree边权更新)
Problem 2082 过路费 Accept: 382 Submit: 1279 Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- 浅谈Model1 VS Model2
在学习drp的过程中就对model1和model2产生了浓厚的兴趣,一直都没有好好总结下,接下来就和大家一起学习下它们的真面目. 一.是什么? 首先大家提到model想到了什么?它的名词意识是:模型: ...
- Oracle RMAN备份中catalog和nocatalog区别
nocatalog方式:用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息,即RMAN的备份信息写在本地控制文件里面. cat ...
- ios 中生成随机数
ios 有如下三种随机数方法: 1. srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; 2. s ...
- Building Block[HDU2818]
Building Block Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HTML5音频可视化频谱跳动代码
今天学习到用canvas来写 HTML5音频可视化频谱跳动代码 将代码在此做一总结: <!DOCTYPE html> <html lang="en"> ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- iOS开发者账号证书配置及相关工作
申请到开发者账号,肯定要先配置一下才可以使用,这主要是iOS证书及配置文件: 以下这篇文章写得比较全面,故不再累赘,需要的同学可以看一下: iOS开发证书与配置文件的使用
- DataBaseFactory基础了解
<add name="Connection str" connectionString="data source=.;pwd=12;uid=sa;database ...