nyoj237 游戏高手的烦恼(最小点覆盖)
游戏高手的烦恼
- 描写叙述
-
有一位传说级游戏高手。在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有很多敌人。玩家能够使用炸弹炸掉某一行或者某一列的全部敌人。
他是种玩什么游戏都想玩得非常优秀的人。所以。他决定。使用尽可能少的炸弹炸掉全部的敌人。
如今给你一个游戏的状态,请你帮助他推断最少须要多少个炸弹才干炸掉全部的敌人吧。
比方说,下图中X表示敌人
X . X
. X .
. X .
则,他仅仅须要炸掉第1行与第2列就能炸掉全部的敌人,所以仅仅须要两颗炸弹就能够了。
题意就是用最少的炸弹 消灭全部敌人 也就是最小点覆盖。
而最小点覆盖能够通过最大匹配实现。
要想求最大匹配 最好的算法就是匈牙利算法
而在这道题中 怎样构图又成了不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 游戏高手的烦恼(最小点覆盖)的更多相关文章
- NYOJ 237 游戏高手的烦恼
游戏高手的烦恼时间限制:1000 ms | 内存限制:65535 KB难度:5描述有一位传说级游戏高手,在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有许多敌人,玩家可以使用炸弹炸掉某 ...
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...
- 【题解】Luogu p2016 战略游戏 (最小点覆盖)
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...
- HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】
<题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...
- hdu 2236(二分图最小点覆盖+二分)
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU--1054--Strategic Game【最小点覆盖】
链接:pid=1054">http://acm.hdu.edu.cn/showproblem.php?pid=1054 题意:一个熊孩子玩策略游戏,他须要用最少的士兵守卫最多的道路.假 ...
- Cogs 1632. 搬运工(二分图最小点覆盖)
搬运工 ★ 输入文件:worker.in 输出文件:worker.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 小涵向小宇推荐了一款小游戏. 游戏是这样的,在一个n*n的地 ...
- ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)
//匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...
- 【POJ 3041】Asteroids (最小点覆盖)
每次选择清除一行或者一列上的小行星.最少选择几次. 将行和列抽象成点,第i行为节点i+n,第j列为节点j,每个行星则是一条边,连接了所在的行列. 于是问题转化成最小点覆盖.二分图的最小点覆盖==最大匹 ...
随机推荐
- java字节流和字符流编码格式(转自姚刚)
/** * 字节流和字符流的区别, * (1)字符流带有缓冲,必须flush或close后数据才会从缓存中写入磁盘文件. * 字节流直接写文件. * (2)字符流在创建流的时候,指定编码,字节流在文件 ...
- Delphi Socket通信及多线程编程总结
http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstra ...
- AC日记——[Noi2011]阿狸的打字机 bzoj 2434
2434 思路: 构建ac自动机: 抽离fail树: 根据字符串建立主席树: 在线处理询问: 询问x在y中出现多少次,等同于y有多少字母的fail能走到x: 1a,hahahahah: 代码: #in ...
- Android学习--还有一些小技巧
这些小技巧 通过上面的这些文章,就把简单的安卓项目总结了一遍,当然你说懂这些就可以做Android开发的话还是不行的,欠缺的还有很多,但欠缺的这些我们有只能在工作中去总结以及不断的提高,这篇文章我们还 ...
- Scala 实现快速排序和归并排序
def quickSort1(array: Array[Int]): Array[Int] = { def swap(x: Int, y: Int): Unit = { val tmp = array ...
- 循环节(BFS)
循环节 时间限制: 1 Sec 内存限制: 64 MB提交: 56 解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写 ...
- POJ2032 Building a Space Station(Kruskal)(并查集)
Building a Space Station Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7469 Accepte ...
- RabbitMQ (五) 订阅者模式之分发模式 ( fanout )
前面讲到了简单队列和工作队列. 这两种队列有个非常明显的缺点 : 生产者发送的消息,只能进入到一个队列. 消息只能进入到一个队列就意味着消息只能被一个消费者消费. 尽管工作队列模式中,一个队列中的消息 ...
- PHP Shell生成工具Weevely
PHP Shell生成工具Weevely Weevely是一款模拟Telnet连接的PHP Shell工具.它不提供网页形式的接口,而是提供一个命令形式的终端.渗透测试人员首先使用该工具生成对应的 ...
- IDEA的Maven项目找不到class