hdu 1281 棋盘游戏
http://acm.hdu.edu.cn/showproblem.php?pid=1281
棋盘游戏
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3096 Accepted Submission(s): 1827

1 2
1 3
2 1
2 2
3 3 4
1 2
1 3
2 1
3 2
Board 2 have 3 important blanks for 3 chessmen.
题目分析:
1.放尽量多的车,则是求最大匹配
将横坐标放入X集合中,纵坐标放在Y集合中构成一个二分图坐标为(x,y)的位置放车,
则x与y之间有一条连线,车不能互相攻击那么没两条线之间就不能有公共的端点,
即转化为求其最大匹配
2.求重要点个数
将所给的能放车的点一个一个删除,之后求最大匹配,如果最大匹配小于没删之前的最大匹配
那么这个点就是一个重要点
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define N 110 using namespace std; int G[N][N], vis[N], used[N];
int n, m, k; struct st
{
int a, b;
} node[N * N]; bool Find(int u)
{
int i;
for(i = ; i <= m ; i++)
{
if(!vis[i] && G[u][i])
{
vis[i] = ;
if(!used[i] || Find(used[i]))
{
used[i] = u;
return true;
}
}
}
return false;
} int solve()
{
int num = , i;
memset(used, , sizeof(used));
for(i = ; i <= n ; i++)
{
memset(vis, , sizeof(vis));
if(Find(i))
num++;
}
return num;
} int main()
{
int i, p = ;
while(~scanf("%d%d%d", &n, &m, &k))
{
p++;
memset(G, , sizeof(G));
for(i = ; i <= k ; i++)
{
scanf("%d%d", &node[i].a, &node[i].b);
G[node[i].a][node[i].b] = ;
}
int ans = solve();
int t = ;
for(i = ; i <= k ; i++)
{
G[node[i].a][node[i].b] = ;
if(ans > solve())
t++;
G[node[i].a][node[i].b] = ;
}
printf("Board %d have %d important blanks for %d chessmen.\n", p, t, ans);
}
return ;
}
hdu 1281 棋盘游戏的更多相关文章
- hdu 1281 棋盘游戏(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU 1281——棋盘游戏——————【最大匹配、枚举删点、邻接表方式】
棋盘游戏 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- hdu 1281棋盘游戏(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘, ...
- HDU 1281 - 棋盘游戏 - [二分图最大匹配]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1281 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 1281 棋盘游戏 【二分图最大匹配】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1281 题意概括: 有N*M大的棋盘,要在里面放尽量多的“车”,求最多能放的车的个数,和为了放最多的车有多 ...
- hdu 1281 棋盘游戏 (二分匹配)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1281 棋盘游戏(二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 每行每列作为节点,给可以放车的点将对应的行列连边,最多可放置的车即为建二分图后的最大匹配,跑一边 ...
- HDU——1281 棋盘游戏
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- (step6.3.5)hdu 1281(棋盘游戏——二分图的完美匹配)
题目大意:本体是中文题.读者可以直接在OJ上看 解题思路: 1)完美匹配:所有的端点都是匹配点 2)对于二分图的完美匹配,我们需要用一个数组来存储匹配点.(而二分图的其他问题(我们则可以直接使用变量来 ...
随机推荐
- core--线程同步(内核模式)
什么是内核?windows操作系统为了更好的管理进程,线程,创建了很多数据结构,这些数据结构运行在windows的底层,并不开放给开发人员:所以开发人员称这些结构为内核,但是为了开发人员能够使用,wi ...
- SQL group by分组查询(转)
本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳 ...
- Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)
当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程 ...
- UVa 699 (二叉树) The Falling Leaves
题意: 按先序方式输入一棵二叉树,节点是带权的,左孩子在父节点的左一个单位,右孩子在父节点的右一个单位,从左到右输出相同水平位置节点之和. 分析: 做了好几道二叉树的题,代码应该也很好理解了.这里ma ...
- ASP.NET vs MVC vs WebForms
许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上ASP.NET是创建WEB应用的框架而MVC是能够用更好的方法来组织并管理代码的一种更高级 ...
- Bitset位图
位图(bitmap)就是用每一位来存放某种状态,适合于大规模数据但是数据状态又不是很多的情况下,通常来判断数据是否存在.位图的常见应用有两种: 1.存放大规模数据,例如腾讯的面试题,给40亿个unsi ...
- Android app 别用中文名
/************************************************************************* * Android app 别用中文名 * 说明: ...
- php里少用到的session_module_name,以及session的key值限制,简单将session存储为json格式数据的方法
这个函数的作用就是动态的设置php.ini里的session_save_handler,配合session_set_savepath可以在程序里自由配置session的后台方式. session_ca ...
- mysql添加用户和用户权限
Mysql添加用户使用可以对mysql数据库用户表有操作权限的用户名登陆mysqlinsert into user(Host,User,Password) values('%','name','pas ...
- Yii连接多个数据库的方法
一.配置多数据库 大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已.声明你可以在 主配置文件 ( main.php ) 中里声明其它的数据库连接: <?p ...