UVALive 4959 Jumping monkey
题意就是:
一个猎人在森林里捕猎。
然后有只猴子,喜欢躲树的后边,猎人看不见它
然后给出了一张图,表示有哪些树是相邻的。
数据保证任意图中两个树都可以直接或间接的到达
猎人有一个枪,每次他可以选择一颗树,然后射子弹。如果猴子躲那个树后边,就被打死了。
但是如果没躲那个树后边,猴子会利用猎人换子弹的时间立刻蹦到这个树相邻的树上躲藏,
问猎人应该怎样击打树才能保证必然能击打中猴子。
比如第一个样例,
猎人只要在0号树上击打两次即可,因为猴子如果没被打中,必然会往旁边的树跑
然后可以看到的是
n的范围很小。
可以考虑使用状态压缩DP
刚开始因为猴子是有可能出现在所有树上的。
所以状态为(1 << n) - 1
我们的目标是 让猴子出现的可能消灭为0状态
对于猴子每次枪响后转移
对于一个点,必然是其周围所有的点都有可能会跳到这个点上
那么我们每次先将猴子转移后的状态求出来。
选择一个尽量小的点毙掉这颗树上的猴子。
因为没有什么顺序
所以将状态加入队列中来转移
如果转移到了0状态。
因为我们每次都尽量小的点去毙掉
所以能保证字典序,中间过程记录下路径,最后输出即可
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <queue>
#include <vector>
#define eps 1e-8
#define INF 111111111
using namespace std ;
int n, m;
queue<int>q;
vector<int>res;
int st[33];
int pre[(1 << 21) + 5];
int num[(1 << 21) + 5];
int gao()
{
q.push((1 << n) - 1); while(!q.empty())
{
int u = q.front();
q.pop();
int nxt = 0;
for(int i = 0; i < n; i++)
{
if(u & (1 << i))
nxt |= st[i];
}
for(int i = 0; i < n; i++)
if(nxt & (1 << i))
{
int k = nxt ^ (1 << i);
if(pre[k] == -1)
{
pre[k] = u;
num[k] = i;
q.push(k);
if(k == 0) return 1;
}
}
}
return 0;
}
int main()
{
int x, y;
while(scanf("%d%d", &n, &m) != EOF)
{
if(!n && !m) break;
memset(st, 0, sizeof(st));
while(!q.empty()) q.pop();
for(int i = 0; i < m; i++)
{
scanf("%d%d", &x, &y);
st[x] |= (1 << y);
st[y] |= (1 << x);
}
if(n == 1)
{
printf("1: 0\n");
continue;
}
if(m >= n)
{
puts("Impossible");
continue;
}
memset(pre, -1, sizeof(pre));
int k = gao();
if(k == 0)
puts("Impossible");
else
{
res.clear();
int top = 0;
while(top != (1 << n) - 1)
{
res.push_back(num[top]);
top = pre[top];
}
printf("%d:", res.size());
for(int i = res.size() - 1; i >= 0; i--) printf(" %d", res[i]);
puts("");
}
}
return 0;
}
UVALive 4959 Jumping monkey的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 2021CCPC网络赛(重赛)题解
自己还是太菜了,五个小时一个题也没磕出来,还是队友牛逼!... Primality Test 先看这个题,可能一上去就被\(\frac{f(x)+f(f(x))}{2}\)向下取整吓住了,但仔细想想, ...
- Monkey Tradition(中国剩余定理)
Monkey Tradition Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Submi ...
- (light oj 1319) Monkey Tradition 中国剩余定理(CRT)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1319 In 'MonkeyLand', there is a traditional ...
- 1319 - Monkey Tradition
1319 - Monkey Tradition PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...
- 【初学python】使用python调用monkey测试
目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...
- Monkey Patch/Monkey Testing/Duck Typing/Duck Test
Monkey Patch Monkey Testing Duck Typing Duck Test
- monkey命令选项参考
基本参数: --help 打印帮助消息 -v 可以在命令行中出现多次,每次一个-V选项都会增加monkey向命令行打印输出的详细级别.默认的级别0只会打印启动信息. ...
- monkey之monkey日志分析
一.初步分析方法:Monkey测试出现错误后,一般的差错步骤为以下几步:1.找到是monkey里面的哪个地方出错2.查看Monkey里面出错前的一些事件动作,并手动执行该动作3.若以上步骤还不能找出, ...
随机推荐
- dedecms调用所有顶级栏目最新文章的实现方法
做dedecms的模板,我们会遇到各种各样的调用问题,dedecms列表页调用所有顶级栏目文章列表的方法如下所述: 在文章页面经常使用的是 {dede:arclist orderby='pubdate ...
- NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别
NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别 1. Interop含义Interop是互操作的含义.Microsoft.Off ...
- 转:常用的HTML标签和属性解释
基本结构标签: <HTML>,表示该文件为HTML文件 <HEAD>,包含文件的标题,使用的脚本,样式定义等 <TITLE>---</TITLE>,包含 ...
- Java学习----main详解
public class Test1 { public static void main(String[] args) { System.out.println("Hello"); ...
- webBrowser(网络转载)
C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 [C#] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 ...
- ext等待提示
1.Store加载信息等待 ExtJs的Store在加载时候一般是延迟加载的,这时候Grid就会先出现一片空白,等加载完成后才出现数据:因此,我们需要给它添加一个提示信息! 但是Store却没有wai ...
- php 面向对象编程实例 __construct 和 __destruct 区别
大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方 法.构 造函数的声明与其它操作的声明一样,只是其名称必须是_ ...
- 30 个 Python 语言的特点技巧
1 介绍 从我开始学习Python时我就决定维护一个经常使用的“窍门”列表.不论何时当我看到一段让我觉得“酷,这样也行!”的代码时(在一个例子中.在StackOverflow.在开源码软件中,等等 ...
- svn , github工作流
svn 需要有一台中央服务器,所有的分支,主干,标签,全都保存在这台中央服务器上.开发着需要提交代码时,需要保持中央服务器连接.切换分支时会有本地与服务器网络连接. git 改进了这一点,每台安装有g ...
- springmvc 参数绑定
1. httpservletrequest request request.getParameter("a")方法去取参数 用注解@RequestParam绑定请求参数 用注解@R ...