• 题目大意

    这些药都有可能在治愈某些病症的同一时候又使人患上某些别的病症……经过我天才的努力。最终弄清了每种药的详细性能,我会把每种药能治的病症和能使人患上的病症列一张清单给你们,然后你们要依据这张清单找出能治愈全部病症的最少药剂组合……顺便说一声,病症的数目不超过10种。我的药是用不完的,就是说每种药剂都能够被反复使用。

  • 题解

    二进制表示患病状态(2n≤1024种)和每种药的治病与致病状态,然后从2n−1到0開始连有向边,然后bfs出最短路就可以。感觉这样对付一道搜索题大材小用了。

  • Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 200000, nil = 0, maxm = 21, oo = 1000000000;
int n, m, map[maxm][105];
int cur[105], inf[105];//cure infect
int u[maxn], v[maxn], nxt[maxn], pnt[1 << maxm], e;
bool vis[1 << maxm];
int d[1 << maxm];
void add(int a, int b)
{
u[++e] = a; v[e] = b;
nxt[e] = pnt[a]; pnt[a] = e;
}
void init()
{
int x;
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; ++i)
{
for(int j = 1; j <= n; ++j)
{
scanf("%d", &x);
if(x == 1)
{
cur[i] |= (1 << (j - 1));
}
if(x == -1)
{
inf[i] |= (1 << (j - 1));
}
}
}
for(int i = (1 << n) - 1; i > 0; --i)
{
for(int j = 1; j <= m; ++j)
{
add(i, (i & (~cur[j])) | inf[j]);
}
}
}
void work()
{
queue <int> Q;
memset(d, 0x3f, sizeof(d));
Q.push((1 << n) - 1);
d[(1 << n) - 1] = 0;
vis[(1 << n) - 1] = true;
while(!Q.empty())
{
int t = Q.front();
Q.pop();
for(int j = pnt[t]; j != nil; j = nxt[j])
{
if(!vis[v[j]])
{
d[v[j]] = d[t] + 1;
vis[v[j]] = true;
Q.push(v[j]);
}
}
}
if(d[0] > oo) puts("The patient will be dead.");
else printf("%d\n", d[0]);
}
int main()
{
init();
work();
return 0;
}

Tyvj3308毒药解药题解的更多相关文章

  1. 解药还是毒药(codevs 2594)

    2594 解药还是毒药  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description Smart研制出对 ...

  2. codevs 2594 解药还是毒药

    2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...

  3. Hash_P1026毒药?解药?

    #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> ...

  4. 【BFS】【位运算】解药还是毒药

    [codevs2594]解药还是毒药 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别 ...

  5. codevs2594解药还是毒药(状压dp)

    2594 解药还是毒药  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description Smart研制出对付各种症状的解药,可是 ...

  6. vijosP1026毒药?解药?

    hash. 怎么感觉叫状态压缩bfs比较合适呢? #include<cstdio> #include<algorithm> #include<cstring> us ...

  7. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  8. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. Selenium 报错:Element is not clickable at point

    WebDriverException: unknown error: Element <td class="grid - select - input " stype=&qu ...

  2. PHP smarty模版引擎基本安装

    环境:  PHP5.2 以上版本 先去官网下载smarty模版引擎的库文件到你的电脑或服务器上 smarty官方网站库文件下载地址: https://www.smarty.net/download 下 ...

  3. 面试中注意3个javascript的问题

    JavaScript 是所有现代浏览器的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函数. ...

  4. 思路清奇:通过 JavaScript 获取移动设备的型号

    我们一般在浏览器里识别用户的访问设备都是通过 User Agent 这个字段来获取的,但是通过它我们只能获取一个大概的信息,比如你用的是 Mac 还是 Windows,用的是 iPhone 还是 iP ...

  5. Django创建

    Pycharm里面Django模块安装及项目创建和启动: Pycharm里面Django模块安装(也可以指定安装源): 创建Django项目: 注意切换到合适的目录进行安装 diango-admin ...

  6. Ajax、Comet、Websocket、SSE

    从 http 协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...

  7. pytorch conditional GAN 调试笔记

    推荐的几个开源实现 znxlwm 使用InfoGAN的结构,卷积反卷积 eriklindernoren 把mnist转成1维,label用了embedding wiseodd 直接从tensorflo ...

  8. 第一次使用HTML

    1.第一次使用HTML <title>第一次使用HTML</title></head><body>hello,HTML2.文本处理 <title& ...

  9. 【CCF】无线网络 搜索

    [思路] 多个起点同时四周扩展广搜,注意会爆int [AC] #include<iostream> #include<cstdio> #include<cstring&g ...

  10. input标签不能设置height

    首先input是内联标签(inline) inline元素设置width.height属性无效 可以通过设置display:inline-block ,则内联标签可以设置width和height,但是 ...