游戏高手的烦恼

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描写叙述

有一位传说级游戏高手。在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有很多敌人。玩家能够使用炸弹炸掉某一行或者某一列的全部敌人。

他是种玩什么游戏都想玩得非常优秀的人。所以。他决定。使用尽可能少的炸弹炸掉全部的敌人。

如今给你一个游戏的状态,请你帮助他推断最少须要多少个炸弹才干炸掉全部的敌人吧。

比方说,下图中X表示敌人

X . X 

. X . 

. X . 

则,他仅仅须要炸掉第1行与第2列就能炸掉全部的敌人,所以仅仅须要两颗炸弹就能够了。

输入
第一行是一个整数T,表示測试数据的组数(0<T<=400)。

每组測试数据的第一行有两个整数n,K,当中n表示游戏方形区域的大小。(n<=500,K<=10 000)

随后的K行。每行有两个整数i,j表示第i行,第j列有一个敌人(行和列都从1開始编号)。

(1<=i,j<=n)

输出
对于每组測试数据,输出一个整数表示最少须要的炸弹颗数
例子输入
1
3 4
1 1
1 3
2 2
3 2
例子输出
2
来源
POJ翻译而来
上传者
张云聪

题意就是用最少的炸弹 消灭全部敌人 也就是最小点覆盖。

而最小点覆盖能够通过最大匹配实现。

要想求最大匹配 最好的算法就是匈牙利算法

而在这道题中 怎样构图又成了不easy理解的地方。我们能够这样想

因为炸弹能够炸一行或一列

假设第i行 第j列有一个敌人 能够想象成 i点和j点有关系。

问题就变成

pid=239">点击打开链接

#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
vector<int>map[505];
bool vis[505];
int conn[505];
bool dfs(int x)
{
for(int i=0;i<map[x].size();i++)
{
int y=map[x][i];
if(!vis[y])
{
vis[y]=true;
if(conn[y]==0||dfs(conn[y]))
{
conn[y]=x;
return true;
}
}
}
return false;
}
int main()
{
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
int n,k;
memset(conn,0,sizeof(conn));
memset(map,0,sizeof(map));
scanf("%d %d",&n,&k);
for(int i=0;i<k;i++)
{
int a,b;
scanf("%d %d",&a,&b);
map[a].push_back(b);
}
int ans=0;
for(int i=1;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(dfs(i))
ans++;
}
printf("%d\n",ans);
}
return 0;
}

nyoj237 游戏高手的烦恼(最小点覆盖)的更多相关文章

  1. NYOJ 237 游戏高手的烦恼

    游戏高手的烦恼时间限制:1000 ms | 内存限制:65535 KB难度:5描述有一位传说级游戏高手,在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有许多敌人,玩家可以使用炸弹炸掉某 ...

  2. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

  3. 【题解】Luogu p2016 战略游戏 (最小点覆盖)

    题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...

  4. HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】

    <题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...

  5. hdu 2236(二分图最小点覆盖+二分)

    无题II Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. HDU--1054--Strategic Game【最小点覆盖】

    链接:pid=1054">http://acm.hdu.edu.cn/showproblem.php?pid=1054 题意:一个熊孩子玩策略游戏,他须要用最少的士兵守卫最多的道路.假 ...

  7. Cogs 1632. 搬运工(二分图最小点覆盖)

    搬运工 ★ 输入文件:worker.in 输出文件:worker.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 小涵向小宇推荐了一款小游戏. 游戏是这样的,在一个n*n的地 ...

  8. ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)

    //匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...

  9. 【POJ 3041】Asteroids (最小点覆盖)

    每次选择清除一行或者一列上的小行星.最少选择几次. 将行和列抽象成点,第i行为节点i+n,第j列为节点j,每个行星则是一条边,连接了所在的行列. 于是问题转化成最小点覆盖.二分图的最小点覆盖==最大匹 ...

随机推荐

  1. GIt 和 Github

    原创 by zoe.zhang        GitHub中采用的比较多得是markdown的语法,博客园里对markdown的支持感觉不是特别友好,但是为了应景,还是用了markdown来写这一篇文 ...

  2. ios iphone ipad上iframe的宽度会扩大的解决办法

    这个问题,我从网上查了下,好像是属于ios的bug,android,windows都没有问题. 解决办法,就是在iframe加载完成后,设置 iframe里面body的宽度为多少PX. $(" ...

  3. Spring容器整合WebSocket

    原链接:http://blog.csdn.net/canot/article/details/52575054 WebSocker是一个保持web客户端与服务器长链接的技术.这样在两者通信过程中如果服 ...

  4. Log4Net的控制台,WinForm,WebApplication使用

    一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...

  5. 【C++】重载

    参考:黄邦勇帅 1.操作符重载函数作为类的成员和友元或者独立于类的区别: 当操作符重载函数作为类的成员函数时,操作符重载函数的参数会比作为友元或者独立于类的操作符重载函数少一个参数,因为操作符重载类成 ...

  6. java的maven项目(三)私服的搭建(windows版)

    1       私服 nexus 安装nexus 启动服务 启动失败的解决方法: 登录nexus 用户名/密码  admin/admin123 仓库类型 Virtual   虚拟仓库 Proxy  代 ...

  7. facets学习(1):什么是facets

    ML 数据集可以包含数亿个数据点,每个数据点由数百(甚至数千)的特征组成,几乎不可能以直观的方式了解整个数据集.为帮助理解.分析和调试 ML 数据集,谷歌开源了 Facets,一款可视化工具. Fac ...

  8. 使用jsonp进行跨域请求

    使用jsonp进行跨域请求 在实际的业务中很多时候需要用到跨域请求,然而jsonp为我们提供了一种非常方便的跨域请求的方式,具体实现代码如下: $.ajax({ type:"get" ...

  9. configure.ac中AC_CHECK_LIB的问题

    编译Linux程序时,使用configure.ac生成的configure程序,时常会出现AC_CHECK_LIB检查某个库失败 而相应库通常是存在的,只是依赖于其他的库,此时,需要乃至AC_CHEC ...

  10. linux ssh 登录服务器失败,密码明明没错【解决】

    本来这样登录的: $ ssh 123.123.123.123 //ssh + IP 然后输入密码就是登录不了,显示permision denied 后来使用如下方式登录,成功! $ ssh -v us ...